gpt4 book ai didi

git log 显示两个分支之间的不同提交,包括共同祖先

转载 作者:行者123 更新时间:2023-12-05 02:09:59 26 4
gpt4 key购买 nike

当处理从我们的主要(例如,master)分支创建的功能分支(例如,feature)时,我使用以下 git 命令查看列表已添加到 feature 分支但不在 master 分支上的提交:

git log --oneline master..HEAD

这会输出关于 feature 而不是 master 的提交的简短摘要(请注意,此命令在 check out feature分支):

$ git log --oneline master..HEAD
1ca070a (HEAD -> feature) foo the bar
03a1047 baz the wuz
c9e8279 fop the sip
6ee6d6f up the ante
5812200 bop the binky

问题是,它没有显示 master 分支上的共同祖先提交。我想要的是命令再包含一行,这是共同的祖先提交,如下所示:

1ca070a (HEAD -> feature) foo the bar
03a1047 baz the wuz
c9e8279 fop the sip
6ee6d6f up the ante
5812200 bop the binky
fb37d68 (master) fuzzy the wuzzy

我希望将 master 替换为 master~1 将包括一个在共同祖先之前的提交,因此包括共同祖先,

git log --oneline master~1..HEAD

但是无论我指定master还是master~1,日志摘要总是一样的。

$ git log --oneline master~1..HEAD
1ca070a (HEAD -> feature) foo the bar
03a1047 baz the wuz
c9e8279 fop the sip
6ee6d6f up the ante
5812200 bop the binky

我的问题是,如何在日志摘要中包含共同祖先提交?请注意,共同祖先不一定是 master 分支的尖端。

最佳答案

似乎没有一个 git 命令可以让你做到这一点。 master..HEAD 语法意味着:

commits on HEAD but not on master

下面的语句是等价的:

git log --oneline master..HEAD
git log --oneline HEAD --not master

所以特别是如果你正在处理 merge 提交,向 git 解释你想要排除历史的哪一部分是很复杂的。

bash 解决方法

不过,您可以告诉 git log 他应该显示多少次提交,所以使用一点 bash 魔法,以下命令应该可以执行您想要的操作:

git log --oneline -$(( $(git rev-list --count HEAD ^master) + 1))

解释:

  • $(git rev-list --count HEAD ^master) 计算自 master 以来当前分支上的提交数
  • $(( num + 1 )) 将 num 加一。
  • 然后我们运行 git log --oneline -123(123 是您分支上的提交数 + 1)

关于git log 显示两个分支之间的不同提交,包括共同祖先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59273210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com