git - 显示 git log 时忽略 merge 的提交

标签 git merge

假设我有一个 git 分支并且我正在开发一个大型功能,所以我定期通过运行 git merge master 使其与 master 保持同步。

master 中 merge 会带来很多不同的提交,所以当我执行 git log 时,我得到了我在“这个分支”上的个人提交的交织历史还有一些来自 master

的杂项提交

有没有办法只查看“这个”分支的历史记录?

git 是否在 native 跟踪 merge 中的哪个父项是“主要”父项以及哪个父项“merge ”到另一个?如果是这样,应该可以遍历历史以仅跟随每个 merge 点的“主要” parent ,对吧?

谢谢!

最佳答案

你可以使用

git log origin/master.. --no-merges

因此它只会显示不在主分支中的开发分支中的提交。此外,使用标志 --no-merges,它不会打印具有多个父项的提交。


你的第二个问题的答案是肯定的,在 merge 提交中,基础分支"is"第一个父分支,而你要 merge 到它的分支"is"第二个父分支(简单地说);所以在查找修订时只关注第一个父级,您可以使用标志 --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 中, merge 提交,第一个父级是在 master 中完成的最后一个提交(^1 表示此提交的第一个父级):

$ git log --pretty=format:"%h" a953ca2^1 -1
42554e5 

而第二个是当您将 HEAD merge 到 master 时 HEAD 在您的 dev 分支中瞄准的位置(^2 表示此提交的第二个父级):

$ git log --pretty=format:"%h" a953ca2^2 -1
b5399f7

如果您站在 master 中并使用 --first-parent 选项,它将仅遵循修订中的那些提交:

$ git log --first-parent --pretty=format:"%h" a953ca2 -4
a953ca2
42554e5
d512b35
5f2e69e

关于git - 显示 git log 时忽略 merge 的提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44058837/

相关文章:

python - 如何编写 python 预推送来检查提交消息?

git - 为什么 git end-of-file-fixer 不断在我的文件末尾添加未知字符?

python - 打开元素包装并添加新元素

git - Ivy 与 Git 存储库

git - 将 git 对二进制文件的选择覆盖为文本

eclipse - 无法移动项目,因为它重叠... Git/Eclipse

pdf - 合并 PDF 并保留其索引(外部参照表?)

R:合并同一变量的副本

安卓错误 : Unable to merge dex

php - 合并一个数组,但保留另一个数组中没有的值