我有一个相当整洁的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
输出的值,我该如何实现这一点呢?
2条答案
按热度按时间gtlvzcf81#
请注意,
log
的两点语法是排除运算符(^
)的简写:用这样的话来说:
显示所有
B
可访问但A
不可访问的提交。当
A
或B
是另一个的直接后代时,如果你反转它们,你最终会排除所有的东西。当你大声说出来时,这一点变得更加明显:会是这样的:
显示所有2449d02可访问但5485e88不可访问的提交。
如果你盯着你的图表说,它会很清楚,它是向后的。
**边注:**带2个点的差异与不带点的差异相同:
我发现this summary在思考2点与3点时很有帮助,以及它们在
log
和diff
之间是如何相反的。ffscu2ro2#
订单错误。您无意中要求
git log merge2..merge1
。如果你输入
git log 2449d02..5485e88
(FROM foo TO bar),你将得到从“Feature foo”到“Feature bar”的提交。注意,提交2449d02“Feature foo”不会出现。