我有一个旧的分支,我想删除它。但是,在这样做之前,我想检查对这个分支的所有提交是否在某个时刻合并到其他分支中。因此,我希望看到所有提交到我的当前分支还没有应用到任何其他分支[或者,如果没有一些脚本是不可能的,如何看到一个分支中的所有提交还没有应用到另一个给定的分支?]。


当前回答

我也想计算提交次数,下面是如何做到这一点:

计算当前分支(HEAD)上有多少提交,而不是master上有多少提交:

git log --oneline ^master HEAD | wc -l

Wc -l的意思是“单词计数”——数单词“l”的个数。

当然,还可以看到整个日志消息,正如其他答案所给出的:

git log ^master HEAD

...或者用浓缩的单行形式:

git log --oneline ^master HEAD

如果你也不想计算合并提交,你可以用——no-merge排除那些:

git log --oneline --no-merges ^master HEAD | wc -l

etc.

其他回答

jimmyorr的答案不能在Windows上工作。用——not代替^ like so会有帮助:

git log oldbranch --not newbranch --no-merges

要显示oldbranch中的提交,而不是newbranch中的提交:

git log newbranch..oldbranch

要显示这些提交的差异(注意有三个点):

git diff newbranch...oldbranch

下面是带有图表说明的文档https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#Commit-Ranges

要查看哪些提交在一个分支而不是另一个分支上的列表,使用git log:

git log --no-merges oldbranch ^newbranch

...也就是说,显示不在newbranch上的oldbranch上的所有提交的提交日志。您可以列出多个分支来包括和排除,例如。

git log  --no-merges oldbranch1 oldbranch2 ^newbranch1 ^newbranch2

注意:在Windows命令提示符中(不是Powershell) ^是一个转义键,所以需要用另一个^进行转义:

git log --no-merges oldbranch ^^newbranch

你可能只是想

git branch --contains branch-to-delete

这将列出所有包含从“branch-to-delete”提交的分支。 如果它报告的不仅仅是“branch-to-delete”,那么这个分支已经被合并了。

你的替代方案实际上只是rev-list语法的东西。例如,git log one-branch..另一个分支显示了一个分支需要拥有的所有东西,另一个分支拥有的所有东西。

您可能还会对git show-branch感兴趣,它是一种查看内容在哪里的方法。

只需使用git cherry来选择分支newFeature42中的所有提交,例如:

git cherry -v master newFeature42