Git 基础教程
一般来说,日常使用只要记住下图 6 个命令,就可以了。
几个专用名词的译名如下。
- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
命令速查表
新建代码库
git init // 在当前目录新建一个 git 代码库
git clone [url] // 克隆一个已存在的项目
修改和提交
git status //查看变更的文件
git add [file1] ... // 添加指定文件到暂存区
git add . // 添加当前目录的所有文件到暂存区
git rm [file1] [file2] ... //删除工作区文件,并且将这次删除放入暂存区
git rm --cached [file] // 停止追踪指定文件,但该文件会保留在工作区
git checkout [file] //恢复暂存区的指定文件到工作区
git checkout . // //恢复暂存区的指定文件到工作区
git commit -m [message] // 提交暂存区到仓库区
git commit --amend // 将指定文件的新变化,提交到上一次 commit
git commit --amend
命令执行后,会进入 vim 编辑器。默认直接shift+Z+Z
(windows 平台下)退出即可。可以在这里改写上一次commit的提交信息。
stash
将不需要commit的临时变更放置到堆栈中,需要时再提取出来。
git stash save [message] // 将当前工作目录和暂存区的变更放入堆栈
git stash list // 查看stash了哪些内容
git stash show // 查看最近一次stash内容的改动
git stash show stash@{num} // 查看num次内容的改动
git stash pop // 弹出最近一次stash的内容到工作目录,并从stash列表中删除
git stash apply // 弹出最近一次stash的内容到工作目录,但不从stash列表中删除
git stash drop stash@{num} // 删除num这个stash
git stash clear // 删除所有stash
日志
git log // 显示当前分支的版本历史
git log --oneline --decorate // 日志单行显示
分支
git branch // 列出所有本地分支
git branch -r // 列出所有远程分支
git branch -a // 列出所有本地分支和远程分支
git branch [new-branch-name] // 基于当前分支, 新建一个分支,但依然停留在当前分支
git checkout -b [new-branch-name] // 基于当前分支, 新建一个分支,并切换到新分支
git checkout [branch-name] // 切换到指定分支
git checkout [commit] // 切换到指定节点
git branch -d [branch-name] // 删除分支
分支变更
- 合并
git merge [branch] // 合并指定分支到当前分支
git cherry-pick [commit] // 选择一个commit,合并进当前分支
- 变基
git rebase [branch]|[commit] // 当前分支变基到指定分支
- 撤销
git revert <commit> // 撤销节点C3的修改,并生成新的节点C5
// 将HEAD指向C3, 删除后面的C4,C5节点
git reset [--mixed] <commit> // 清空暂存区,保留工作目录。c4,c5带来的差异也留在工作目录
git reset --soft <commit> // 保留暂存区和工作目录。c4,c5带来的差异会放入暂存区
git reset --hard <commit> // 清空暂存区和工作目录。c4,c5带来的差异会被删除
git reset命令执行时,工作目录和暂存区可以有修改内容。但要注意命令执行后工作目录和暂存区内容的变化。
同步
git pull [remote] [branch] // 取回远程仓库的变化,并与本地分支合并
git push [remote] [branch] // 上传本地指定分支到远程仓库
git push [remote] --force // 强制推送所有分支到远程仓库
git fetch [remote] //下载远程仓库的所有变动
git remote -v // 显示所有远程仓库
标签
git tag // 列出所有tag
git tag [tag] //新建一个tag在当前commit
git tag [tag] [commit] // 新建一个tag在指定commit
git show [tag] // 查看tag信息
git push [remote] [tag] // 提交指定tag
git push [remote] --tags // 提交所有tag
参考