为什么git log merge1..merge2为空?

jrcvhitl  于 2023-04-04  发布在  Git
关注(0)|答案(2)|浏览(181)

我有一个相当整洁的Git历史,功能分支合并到主分支中。这可以在git log --graph --oneline的结果中看到:

*   f8b3a40 (HEAD -> main, upstream/main) Feature baz
|\  
| * 5044a90 baz2
| * fa0c768 baz1
|/  
*   5485e88 Feature bar
|\  
| * f10992d bar5
| * 72c6f1b bar4
| * 05f902b bar3
| * 3d32bb6 bar2
| * a8274c6 bar1
|/  
*   2449d02 Feature foo
|\  
| * 437e321 foo6
| * 5e7af85 foo5
| * 5babacb foo4
| * a66ec89 foo3

所以我可以用git log --first-parent --oneline得到一个很好的总结:

f8b3a40 (HEAD -> main, upstream/main) Feature baz
5485e88 Feature bar
2449d02 Feature foo
7e68bab Feature fizzbuzz

现在我想回顾一下foo和bar之间的变化。git diff 5485e88..2449d02按预期工作,我可以看到所有的代码更改。但是git log 5485e88..2449d02是空的。我期待这样的东西:

commit 5485e88
Author: Jimmy Weasel <jimmy@example.com>
Date:   Wed Mar 22 15:49:53 2023 +0000

Feature bar...

commit f10992d
Author: Jimmy Weasel <jimmy@example.com>
Date:   Wed Mar 22 15:25:03 2023 +0000

bar5...

commit 72c6f1b
Author: Jimmy Weasel <jimmy@example.com>
Date:   Wed Mar 22 15:22:01 2023 +0000

bar4...

如果只给出--first-parent输出的值,我该如何实现这一点呢?

gtlvzcf8

gtlvzcf81#

请注意,log的两点语法是排除运算符(^)的简写:

git log A..B
# is the same as
git log B ^A

用这样的话来说:
显示所有B可访问但A不可访问的提交。
AB是另一个的直接后代时,如果你反转它们,你最终会排除所有的东西。当你大声说出来时,这一点变得更加明显:

git log 5485e88..2449d02

会是这样的:
显示所有2449d02可访问但5485e88不可访问的提交。
如果你盯着你的图表说,它会很清楚,它是向后的。

**边注:**带2个点的差异与不带点的差异相同:

git diff A B
# is the same as
git diff A..B

我发现this summary在思考2点与3点时很有帮助,以及它们在logdiff之间是如何相反的。

ffscu2ro

ffscu2ro2#

订单错误。您无意中要求git log merge2..merge1
如果你输入git log 2449d02..5485e88(FROM foo TO bar),你将得到从“Feature foo”到“Feature bar”的提交。注意,提交2449d02“Feature foo”不会出现。

相关问题