获取分支从当前分支分支以来的提交日志的最佳方法是什么?到目前为止,我的解决方案是:
git log $(git merge-base HEAD branch)..branch
git-diff 的文档表示 git diff A...B
等同于 git diff $(git-merge-base A B) B
。另一方面,git-rev-parse 的文档表示 r1...r2
被定义为 r1 r2 --not $(git merge-base --all r1 r2)
。
为什么这些不同?请注意,git diff HEAD...branch
提供了我想要的差异,但相应的 git log 命令提供了比我想要的更多的东西。
在图片中,假设是这样的:
x---y---z---branch / ---a---b---c---d---e---HEAD
我想要一个包含提交 x、y、z 的日志。
git diff HEAD...branch
给出这些提交- 但是,
git log HEAD...branch
给出了 x、y、z、c、d、e。
最佳答案
在修订列表的上下文中,A...B
是 git-rev-parse
定义它的方式。 git-log 获取修订列表。 git-diff
不采用修订列表 - 它采用一个或两个修订,并且定义了 A...B
语法来表示它是如何在 git-diff
联机帮助页。如果 git-diff
没有显式定义 A...B
,那么该语法将无效。请注意,git-rev-parse
联机帮助页在“指定范围”部分描述了 A...B
,并且该部分中的所有内容仅在修订版的情况下有效范围有效(即需要修订列表时)。
要获得仅包含 x、y 和 z 的日志,请尝试 git log HEAD..branch
(两个点,而不是三个)。这与 git log branch --not HEAD
相同,意思是所有分支上的提交不在 HEAD 上。
关于git - Git 如何获取分支上的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53569/