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

Sas*_*ert 170 git

我有两个分支develnext.在开发中,我或多或少都有大量的提交.一些提交是樱桃挑选的next.此外,我添加了一些提交到下一个合并到devel.

现在我想看看缺少什么next,所以我可以在将它们带到之前测试细节上的变化next.我现在的问题是,如何查看哪些提交devel但未包含?

Mar*_*air 198

这个很少使用的命令会git cherry显示尚未被挑选出来的提交.这里的文档git cherry在这里,但简而言之,您应该能够做到:

git checkout devel
git cherry next
Run Code Online (Sandbox Code Playgroud)

...并看到输出有点像这样:

+ 492508acab7b454eee8b805f8ba906056eede0ff
- 5ceb5a9077ddb9e78b1e8f24bfc70e674c627949
+ b4459544c000f4d51d1ec23f279d9cdb19c1d32b
+ b6ce3b78e938644a293b2dd2a15b2fecb1b54cd9
Run Code Online (Sandbox Code Playgroud)

开头的提交+将是你尚未挑选的提交next.在这种情况下,到目前为止我只选择了一个提交.您可能希望将该-v参数添加到git cherry命令中,以便它还输出每个提交的主题行.

  • 你不需要`git checkout devel`,你可以做`git cherry next devel`. (25认同)
  • _"可能想添加`-v`"_?没有`-v`的樱桃就像没有`-la`的`ls`.**; - J** (19认同)
  • 而且您不知道如何让“cherry”标记或排除等效提交,对吗?`cherry` 看起来像一个管道命令,但(似乎)没有提供很多选项。对于我目前所处的情况,“gitcherry”给了我误报,但 @sehe 的“git log --cherry-pick”正确排除了先前选择/重新设置的提交。 (2认同)

seh*_*ehe 102

另外,你可以使用

git log --left-right --graph --cherry-pick --oneline devel...next
Run Code Online (Sandbox Code Playgroud)

获取分支之间不共享的实际不同提交的良好列表.

操作词是 --cherry-pick

--cherry-pick

当提交集受限于对称差异时,省略任何引用与"另一方"上的另一个提交相同的更改的提交.例如,如果您有两个分支A和B,通常只在一侧列出所有提交的方法是--left-right,就​​像上面该选项说明中的示例一样.然而,它显示了从另一个分支中挑选出来的提交(例如,"b上的第3个"可以从分支A中挑选出来).使用此选项,将从输出中排除此类提交对.

更新如评论中所述,最新版本的git添加了--cherry-mark:

--cherry-mark

像--cherry-pick(见下文)但标记等效提交=而不是省略它们,而不等价的提交+.

  • 'gls --first-parent --cherry-mark --left-onlydevelopment...next' 其中 gls 是我的 git log 别名,具有所有漂亮的格式。cherry-mark 显示了开发中的cherry pick 和not-cherry pick 提交,但对它们进行了不同的标记。 (3认同)
  • 这对我不起作用。我的 git 版本不知道 --one-line,因此我删除了它。然后我必须交换 devel 和 next 并且它起作用了。很不错! (2认同)
  • 为了好玩,我得出了'...'(对称差异)rev-parse语法**[2006年7月添加](https://github.com/gitster/git/commit/3dd4e7320de037a5b0adf3c53fbf5baf94a6c540)**,及其文档[已于2008年6月更新](https://github.com/gitster/git/commit/224712e521c6d4f740045affa4d1ee1454db10d4).开源的快乐! (2认同)
  • 添加 --no-merges 也许更好 (2认同)

Bry*_*ley 49

您可以尝试执行git log子集:

git log --oneline devel ^next
Run Code Online (Sandbox Code Playgroud)

  • 这是我认为最好的解决方案(@ sehe的回答也显示了下一个没有开发的提交 - 在OP的上下文中,没有,但是我的有 - 使用`--left-only`本来会更好).但是,通过添加`--no-merges`来省略任何合并提交(例如,如果某个功能或修补程序分支(单独)合并到devel和next中),可以稍微改进这一点.当然,严格来说,合并中的冲突解决可能会产生其他差异,但通常情况并非如此.``--no-merges``选项也可以有效地应用于其他答案. (3认同)

jus*_*don 25

怎么样

git log next..devel
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您当前在该分支上,也可以省略第二个分支.即`git log next..` (3认同)