显示git日志时忽略合并提交

use*_*003 2 git merge

假设我有一个git分支,我正在研究一个大型功能,所以我会定期master通过运行来保持它的最新状态git merge master.

合并master会带来很多不同的提交,所以当我这样做时git log,我在"这个分支"上得到了我个人提交的相互交织的历史,还有一些错误的提交来自master

有没有办法只查看"this"分支的历史记录?

git本身是否跟踪合并中的哪个父级是"主要"父级,哪个父级"合并"到另一个中?如果是这样,应该可以遍历历史记录,只跟随每个合并点的"主要"父母对吗?

谢谢!

odr*_*dek 6

您可以使用

git log origin/master.. --no-merges
Run Code Online (Sandbox Code Playgroud)

所以它只会显示你的dev分支中不在master中的提交.此外,使用该标志,--no-merges它不会打印具有多个父级的提交.


你的第二个问题的答案是肯定的,在合并提交中,基础分支"是"第一个父,而你正在合并它的分支"是"第二个(以简单的方式放置); 因此,在查找修订时,只能跟随第一个父级,您可以使用该标志--first-parent.

这意味着如果你有这个历史:

*   a953ca2 Merge remote-tracking branch 'origin/WildBranch'
|\
| * b5399f7 Commit to WildBranch: 1483140838
| * 30f181d Commit to WildBranch: 1483140837
| * 5f18ce9 NEW BRANCH: WildBranch
* | 42554e5 Commit to master: 1483140840
* | d512b35 Commit to master: 1483140839
|/
* 5f2e69e Commit to master: 1483140836  
Run Code Online (Sandbox Code Playgroud)

因此,如果我站在a953ca2合并提交中,第一个父级是在master中完成的最后一次提交(^1意味着此提交的第一个父级):

$ git log --pretty=format:"%h" a953ca2^1 -1
42554e5 
Run Code Online (Sandbox Code Playgroud)

而第二个是当你将它合并到master时,HEAD瞄准你的dev分支的地方(^2意味着这个提交的第二个父级):

$ git log --pretty=format:"%h" a953ca2^2 -1
b5399f7
Run Code Online (Sandbox Code Playgroud)

如果你站在主人并使用该--first-parent选项,它将只遵循修订中的那些提交:

$ git log --first-parent --pretty=format:"%h" a953ca2 -4
a953ca2
42554e5
d512b35
5f2e69e
Run Code Online (Sandbox Code Playgroud)