我们说我有一个git分支,而且我正在处理大型功能,因此我会定期通过运行master
与git merge master
保持同步。
master
中的合并带来了很多不同的提交,所以当我git log
我得到了我个人提交的交织历史时,这个分支"以及来自master
有没有办法只查看"这个"科?
git是否本机跟踪合并中的哪个父级是" primary"一个和哪个是"合并在"对方?如果是这样的话,应该可以遍历历史记录,只遵循" primary"每个合并点的父母对吗?
谢谢!
答案 0 :(得分:6)
你可以使用
git log origin/master.. --no-merges
所以它只显示你的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
所以如果我站在a953ca2
,合并提交,第一个父是最后一次提交在master(^1
意味着这个提交的第一个父):
$ git log --pretty=format:"%h" a953ca2^1 -1
42554e5
而第二个是HEAD在你的dev分支中将它合并到master时的位置(^2
表示此提交的第二个父级):
$ git log --pretty=format:"%h" a953ca2^2 -1
b5399f7
如果您站在主人并使用--first-parent
选项,它将仅遵循修订中的那些提交:
$ git log --first-parent --pretty=format:"%h" a953ca2 -4
a953ca2
42554e5
d512b35
5f2e69e