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


当前回答

你可能只是想

git branch --contains branch-to-delete

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

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

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

其他回答

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

git log newbranch..oldbranch

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

git diff newbranch...oldbranch

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

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

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

您可以使用这个简单的脚本查看未合并的提交

#!/bin/bash
# Show commits that exists only on branch and not in current
# Usage:
#   git branch-notmerge <branchname>
#
# Setup git alias
#   git config alias.branch-notmerge [path/to/this/script]
grep -Fvf <(git log --pretty=format:'%H - %s') <(git log $1 --pretty=format:'%H - %s')

你也可以使用工具git-wtf来显示分支的状态

如果你需要检查的是一个分支,例如,如果你想让分支“B”完全合并到分支“A”中,你可以简单地执行以下操作:

$ git checkout A
$ git branch -d B

git branch -d <branchname>具有“分支必须在HEAD中完全合并”的安全性。

注意:如果分支B合并到A中,这实际上会删除分支B。

虽然这里发布的一些答案将有助于找到您想要的东西,但git分支的以下子命令是更适合您的任务的解决方案。

——merged用于查找所有可以安全删除的分支,因为这些分支完全包含在HEAD中。

而在master中,可以运行命令来枚举可以安全移除的分支,如下所示:

git branch --merged
  develop
  fpg_download_links
* master
  master_merge_static

# Delete local and remote tracking branches you don't want
git branch -d fpg_download_links
git push origin :fpg_download_links
git branch -d master_merge_static
git push origin :master_merge_static

# There is also a flag to specify remote branches in the output
git branch --remotes --merged