如何查看合并提交的提交记录?

69
如果将my-feature-branch合并到my-main-branch,我该如何查看从my-feature-branch合并了哪些提交记录?
3个回答

82

git log abc123^..abc123
显示已经合并到合并提交abc123的提交。

创建一个git别名log-merge以便轻松重用:

$ git config --global alias.log-merge \
'!f() { git log --stat "$1^..$1"; }; f'
$ git log-merge abc123

对于一行代码版本:

$ git config --global alias.log-merge-short \
'!f() { git log --pretty=oneline "$1^..$1"; }; f' 

这个解决方案非常好。我修改了命令的一个版本,以便我们可以获得“简短”版本:`$ git config --global alias.merge-log-short '!f() { git log --pretty=oneline "$1^..$1"; }; f'` - glade

51

如果你想查看最近一次合并中合并的每个提交,可以尝试以下方法:

git log $(git merge-base --octopus \
$(git log -1 --merges --pretty=format:%P)).. --boundary

这是我的当前日志示例:

$ git log --graph --pretty=oneline --abbrev-commit
* 44899b9 pouf
*   8f49f9c Merge branch 'test'
|\  
| * 3db39ca test
* | 69f431c pif
* | df1f51c lala
|/  
* 8fae178 pif2
* 20f8ba6 init

如果我只想要最后一次合并相关的提交,我需要使用 git log -1 --merges --pretty=format:%P,这将给出第一个可用合并的父级:

$ git log -1 --merges --pretty=format:%P
69f431cec7859b61d33c7503c9431ceea2aaf3e0 3db39ca3ab1e8f70462db23d94590628b5e7ad7b

现在我知道需要跟踪的父级,我需要它们的共同基础,可以通过git merge-base --octopus命令来获取(--octopus只是为了谨慎起见):

$ git merge-base --octopus \
$(git log -1 --merges \
--pretty=format:%P)
8fae178666e34a480b22e40f858efd9e7c66c3ca

现在使用git log,我可以搜索从基础版本到当前的HEAD之间的每个提交记录:

$ git log $(git merge-base --octopus \
$(git log -1 --merges --pretty=format:%P)).. \
--boundary --graph --pretty=oneline --abbrev-commit 
* 44899b9 pouf
*   8f49f9c Merge branch 'test'
|\  
| * 3db39ca test
* | 69f431c pif
* | df1f51c lala
|/  
o 8fae178 pif2

如果你有点完美主义,你也可以这样做:

$ git log 
$(git merge-base --octopus \
$(git log -1 \
--merges --pretty=format:%P))..$(git log -1 --merges --pretty=format:%H) \
--boundary --graph --pretty=oneline --abbrev-commit 
*   8f49f9c Merge branch 'test'
|\  
| * 3db39ca test
* | 69f431c pif
* | df1f51c lala
|/  
o 8fae178 pif2

现在我想将其保留为别名 :)

--graph --pretty=oneline --abbrev-commit选项是可选的。


资源:


git log --graph --onelinegit log --graph --pretty=oneline --abbrev-commit 的快捷方式。 - Tal Jacob - Sir Jacques
我已经在这个仓库中将这个答案更加适用于日常使用,您可以随意使用。https://github.com/taljacob2/git-log-merge - Tal Jacob - Sir Jacques
这包括比得票最高的答案更多的提交。如果我删除 --boundary,那么我会得到相同的数字,但我不知道为什么,因为我不完全理解涉及的所有部分。 - bmaupin

0

如果你有一个合并提交(比如 a2345),然后运行 git log -1 a2345,它会告诉你父提交的名称(即被合并到此提交中的提交)。这是你要找的吗?


是的,这就是我想要的(仅显示1个提交)。我假设您也可以在正常的git日志视图中完成这个操作? - The Pixel Developer
是的。如果您想浏览更多提交的父级,GUI(gitk)更有用。限制为单个提交是因为 -1。去掉它,您将得到常规日志。 - Noufal Ibrahim
如果我去掉“-1”,它会显示所有提交消息的日志,这似乎没有用。 - knocte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接