目录

Git命令使用记录-工具篇

Git命令使用记录-来源自官方文档

选择修订版本

简短的 SHA-1

查看每次提交简短的SHA-1值

1
git log --abbrev-commit --pretty=oneline

假设某个提交是1c002dd....,如果你想git show这个提交,下面三个命令是等价的(假设简短的版本没有歧义)

1
2
3
git show 1c002dd4b536e7479fe34593e72e6c6c1819e53b
git show 1c002dd4b536e7479f
git show 1c002dd

分支引用

如果想查看某个分支的最后一次提交信息,可以使用rev-parse探测出该分支的最后一次SHA-1值

1
git rev-parse <branchName>

然后再git show打印出的SHA-1值

引用日志

1
git reflog

如果想查看仓库中HEAD在五次前的所指向的提交

1
git show HEAD@{5}

如果想查看master分支在昨天的时候指向了哪个提交

1
git show master@{yesterday}

引用日志只存在于本地仓库,如果查询的时间早于本地最早操作时间,则会显示第一次操作记录

可以运行git log -g来查看类似于git log输出格式的引用日志信息

1
git log -g master

祖先引用

查看HEAD的上一个提交,也就是“HEAD的父提交”,下面两个命令等价

1
2
git show HEAD^
git show HEAD~

查看HEAD的第二父提交

1
git show HEAD^2

查看HEAD的第一父提交的第一父提交,下面两个命令等价

1
2
git show HEAD^^
git show HEAD~2

提交区间

双点

查看experiment分支中还有哪些提交尚未被合并入master分支

1
git log master..experiment

查看master分支中存在,而experiment分支中不存在的提交,下面三个命令等价

1
2
3
git log experiment..master
git log ^experiment master
git log master --not experiment

如果在..的某一边留空,则默认为HEAD

多点

查看所有被refArefB包含的但是不被refC包含的提交,下面两个命令等价

1
2
git log refA refB ^refC
git log refA refB --not refC

三点

查看master或者experiment中包含的但不是两者共有的提交

1
git log master...experiment

如果加上参数--left-right,会显示每个提交到底处于哪一侧的分支

1
git log --left-right master...experiment

交互式暂存

如果运行git add时使用-i或者--interactive选项,Git将会进入交互式终端模式

1
2
git add -i
git add --interactive

储藏与清理

如果想要切换分支,但是不想提交之前修改的文件,这时需要用到储藏

1
2
git stash
git stash save

这时就可以轻易的切换分支并在其他地方工作,如果想要查看储藏

1
git stash list

如果想要重新应用储藏,执行👇命令,如果不指定一个储藏,则默认最近一个

1
2
git stash apply
git stash apply stash@{2}

重新应用后,之前暂存的文件并没有重新暂存,这时需要--index选项

1
git stash apply --index

重新应用后,堆栈上的储藏并不会删除,可以使用删除命令

1
git stash drop stash@{2}

如果想要将储藏重新应用后立即从栈上删除,可以使用👇的命令

1
git stash pop

如果不想储藏已暂存的文件,需要--keep-index选项

1
git stash save --keep-index

如果想储藏未跟踪文件,需要--include-untracked-u选项

1
git stash save -u

如果指定了--patch标记,Git会交互式的提示储藏

1
git stash --patch

从储藏创建一个分支

如果重新应用储藏时,可能会有冲突,这时可能会想创建一个新分支,并在新分支上重新应用储藏

1
git stash branch <branchName>

清理工作目录

移除所有未被忽略并且未被追踪的文件,非常危险!

1
git clean

更安全一些的命令,将所有文件储藏

1
git stash --all

git clean的一些选项

查看git clean将会做什么,-n

1
git clean -n

移除工作目录中所有未追踪的文件以及空的子目录,-d

1
git clean -n -d

强制移除,确定移除,-f

1
git clean -n -d -f

移除.gitignore文件忽略的文件类型,-x

1
git clean -n -d -x -f

以交互模式运行clean命令,-i

1
git clean -x -i

特殊合并

合并某个分支上的单个commit

假设将feature分支上的commitfdb7b6合并到master分支,不合并其它commit:

先查找想要合并的commit的SHA-1值;

再checkout到想要合并的分支;

1
git checkout master

最后执行cherry-pick命令:

1
git cherry-pick fdb7b6

合并某个分支上的一系列commits

假设将feature分支上的commitfdb7b6 d46ee6合并到master分支

首先,在feature分支基础上创建一个新分支,并且指明最后一个commit

1
git checkout -b newBranch d46ee6

然后,使用rebase命令合并到master分支,要指明合并开始的commit

1
git rebase --onto master fdb7b6^
1
to be continue...