如何看一个分支中的哪个提交不在另一个分支?
我有两个分支devel
和next
。 在开发中,我有一个或多或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了解更多信息。