Git 我如何在两个分支之间找到挂起的提交(不包括已选择/合并的更改)?

Git 我如何在两个分支之间找到挂起的提交(不包括已选择/合并的更改)?,git,git-merge,git-diff,git-log,Git,Git Merge,Git Diff,Git Log,简单的场景:我在git分支A上有几个提交,它是一段时间前从master派生的。我想找出所有需要合并回主服务器的未决提交。下面的命令给出了这些提交的列表。 $git log--cherry--oneline master..A 现在,在稍微复杂一点的场景中,我有另一个分支B,它也是从master派生出来的,并且有几个提交,我现在想集成回master。然而,我的两个开发人员已经在他们的“私有”分支(比如b1、b2、b3——都是分支B的分支)上选择了一些提交,然后,他们也从他们的私有分支向主分支选择了

简单的场景:我在git分支A上有几个提交,它是一段时间前从master派生的。我想找出所有需要合并回主服务器的未决提交。下面的命令给出了这些提交的列表。 $git log--cherry--oneline master..A

现在,在稍微复杂一点的场景中,我有另一个分支B,它也是从master派生出来的,并且有几个提交,我现在想集成回master。然而,我的两个开发人员已经在他们的“私有”分支(比如b1、b2、b3——都是分支B的分支)上选择了一些提交,然后,他们也从他们的私有分支向主分支选择了这些提交(使用新的提交散列,与“B”分支上的原始提交散列不同)。因此,理想情况下,这些不需要重新合并到主机上,因为它们已经合并到主机上(只是通过不同的樱桃采摘路径)

我的问题是:是否有任何git命令可以告诉我来自B的哪些提交仍有待合并?我真的不想看到通过其他一些(例如,private、b1、b2、b3)分支合并到master的提交。我假设git很聪明,知道提交虽然没有直接合并,但可能已经通过其他多个分支作为cherry picking的一部分合并了

在这个图形场景中,我希望git命令向我显示3个提交(c7、c8和c9)仍有待合并到master。

如果您想查看分支之间的差异,我建议您查看此命令,以友好的方式显示它

git log --all --graph --pretty=format:'%C(auto)%h%C(auto)%d %s %C(dim white)(%aN, %ar)'

git cherry master B分支机构


它列出了所有在B分支上但不在主分支上的提交,并在每一行前面加了一个前导的
+
标记。如果行以
-
标记开头,则以下提交(B分支)在主节点上具有等效提交(通过rebase或cherry pick),可以忽略。

嗨,ElpieKay,“等效”提交的定义是什么?是否对每个参与提交的文件内容进行比较?在我的场景中,当合并过程从分支B合并到分支b1时,合并过程可能在提交c5中引入了微小的“额外”更改-是否仍会导致它显示为“+”-表示“等待合并”到主节点?嗨@ElpieKay,我想我找到了对我的评论的答案——因此,如果内容在合并过程中发生了变化(对于java项目,IDE在签入之前尝试自动更正导入时通常会发生这种情况),那么它将被标记为挂起的提交。如果我理解错误,请纠正我。@UmeshAdtani如果Commit
A
作为Commit
A'
被cherry选择到另一个分支,那么
A
A'
是等效的提交。我的观察是,如果cherry选择是直接的,并且没有发生合并冲突或其他更改,然后它被视为等价的,但是,如果cherry picking进程注入了任何其他更改,例如,合并冲突解决方案等,那么它仍然被视为不等价的,因此它最终显示提交的“+”前缀。这种行为的根本原因可能是目标分支上“cherry picked”提交上的预期补丁id与cherry从中选择更改的原始提交不同。这似乎相当于gitk branch1 branch2,不是吗?