如何看一个分支中的哪个提交不在另一个分支?

我有两个分支develnext 。 在开发中,我有一个或多或less的数量巨大的提交。 一些提交樱桃采摘next 。 另外我添加了一些提交到下一个被合并到devel

现在我想看看接下来什么是缺失的,所以我可以在把它们带到next之前详细testing这些变化。 现在我的问题是,我怎么能看到哪些提交是在devel而不是在下一个呢?

小命令git cherry显示你还没有樱桃采摘提交。 git cherry的文档在这里 ,但总之,你应该能够做到:

 git checkout devel git cherry next 

…看到输出有点像这样:

 + 492508acab7b454eee8b805f8ba906056eede0ff - 5ceb5a9077ddb9e78b1e8f24bfc70e674c627949 + b4459544c000f4d51d1ec23f279d9cdb19c1d32b + b6ce3b78e938644a293b2dd2a15b2fecb1b54cd9 

+开始的提交将会是那些你还没有挑选出来的提交。 在这种情况下,我只能select一个提交到目前为止。 您可能需要将-v参数添加到git cherry命令,以便它也输出每个提交的主题行。

另外,你可以使用

 git log --left-right --graph --cherry-pick --oneline devel...next 

得到一个不在分支之间共享的实际不同提交的好列表。

操作中的词是--cherry-pick

--cherry-pick

当提交集合被限制为对称差异时,省略任何提交引入与“另一侧”上的另一个提交相同的更改的提交。 例如,如果你有两个分支,A和B,通常只列出所有提交的方法是–left-right,就​​像上面那个选项描述中的例子一样。 然而,它显示了从其他分支挑选的提交(例如,可以从分支A挑选“b上的第三个”)。 使用这个选项,这样的提交对从输出中排除。

更新正如在评论中提到的,最近版本的git添加了--cherry-mark

--cherry-mark

与–cherry-pick(见下面)类似,但是标记与=相同的提交,而不是省略它们,而与+不等价的提交。

你可以尝试做git log子集:

 git log --oneline devel ^next 

怎么样

 git log next..devel 

结果与Byran的答案类似(不同的提交顺序),但是我们的答案都会在分支之间产生不同的提交,而不是只显示一个分支中的内容而不显示其他分支。

要获取未集成到发行版分支(下一个)中的提交列表,可以使用:

 git rev-list --reverse --pretty="TO_TEST %h (<%ae>) %s" --cherry-pick --right-only origin/release_branch...origin/development_branch | grep "^TO_TEST " > NotIntegratedYet.txt 

查看git-rev-list了解更多信息。