命令
查看帮助文档
1 2 3
| git help CMD git CMD --help
|
查看状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| git status
git config user.name git config user.email
git remote -v
git tag
git show v1.0
git show 9cf65ab
git config --global --get-regexp 'alias\.'
git remote show origin
|
查看日志
格式占位符:https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E5%8E%86%E5%8F%B2#pretty_format
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| git log
git log -2
git log -1 -p
git log -1 --stat
git log --no-merges
git log --pretty=oneline
git log --pretty=format:"%h - %an, %ar: %s"
git log --pretty=format:"%h %s" --graph
git log --since="2 days ago"
git log --author="xxx" git log --committer="xxx"
|
文件操作
1 2 3 4 5 6
| git rm '指定模式' git rm --cached log/\*.log
git mv FROM TO
|
修改、回滚
1 2 3 4 5 6 7 8
| git commit -amend
git reset HEAD '文件'
git checkout -- '文件'
git reset --hard 版本号
|
标签
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| git tag
git show v1.0
git tag -l 'v1.0'
git tag -a v1.1 -m "COMMENT"
git tag -a v1.2 9cf65ab
git tag -d v1.2
git push origin --delete v1.2
git push origin v1.2
git push origin --tags
git checkout v1.2
|
HEAD分离:
- 含义:不再指向分支,而是指定的提交对象(指定标签/哈希)。
- 风险:HEAD分离状态下的提交不基于分支,无法推送到远程仓库(不可追踪)。
- 应用场景:历史版本的临时验证,若需要基于此修改必须创建新分支。
别名
Git支持对命令自定义别名。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| git config --global alias.co checkout
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
git config --global alias.visual '!gitk' git config --global alias.dir '!dir'
git co master git unstage FILE git last git visual git dir
git config --global --unset alias.visual git config --global --unset alias.dir
|
分支
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| git branch
git branch -v
git branch --merged
git branch dev
git checkout dev git checkout dev origin/dev
git checkout -b fix
git merge fix
git branch -d fix
git log --oneline --decorate --graph --all
|
克隆、拉取
1
| git clone https://github.com/USERNAME/REPO.git
|
提示:
- origin: 自动指向远程仓库地址。
- master: 指向本地分支的最新提交,或main。
- origin/master: 标记本地master分支的拉取时状态,无法改变。
1 2 3 4 5 6 7 8
| git pull git pull origin dev
git fetch origin
git merge origin
|
提示:
git fetch origin : 协作时,别人的提交可能和本地产生冲突,fetch可以更好的解决冲突。
推送
1 2 3 4 5 6 7 8 9
| git push origin dev
git push origin -d dev
git push origin --delete v1.2
git push origin v1.2
|
变基
详见:https://git-scm.com/book/zh/v2/Git-%e5%88%86%e6%94%af-%e5%8f%98%e5%9f%ba
和 merge 类似,用于整合不同分支的修改。
区别:
merge : 将两分支的最新快照和最近的公共祖先快照进行 三方合并 ,并生成一个新的快照提交。
rebase : 找到当前分支自最近公共祖先之后的所有修改(提取为临时文件),然后当前分支指向目标分支,再依次应用修改(提交历史更简洁)。
案例:

1 2 3
| git checkout master git merge experiment
|

1 2 3
| git checkout experiment git rebase master
|

1 2 3 4
| git checkout master git merge experiment git push
|

1 2 3 4 5 6
| $ git mergetool $ git rebase --continue
$ git rebase 版本号 $ git rebase HEAD-3
|
变基风险
如果提交存在于你的仓库之外,而别人可能基于这些提交进行开发,那么不要执行变基。
cherry-pick
将当前分支的若干提交信息应用到其他分支。
1 2
| git cherry-pick HASHCODE
|
应用场景:
如本应该在 dev 分支上修改提交的,错误地在 fix 分支上提交了。cherry-pick 可以挑选指定提交在 dev 上进行提交。