获取已合并到另一个分支的分支列表

8
我在实现这个过程中遇到了一些问题,想要找到一个更简单的方法。目前,我可以通过输出从目标分支和主干合并的分支 - merged分支,将这些命令的输出写入文件,然后比较这两个文件来确定已合并的分支。是否有更好的方法获取此信息?
例如,假设分支branch1,branch2和branch3都从master创建,并在其中进行开发工作。然后,branch1和branch2合并到integrationBranch分支。该命令应该能够告诉我branch1和branch2已合并到integrationBranch。
编辑:
当我运行 git branch --merged 时,首先合并的分支始终不会出现在输出中。
示例:
git checkout inegraionBranch
git merge origin/branch1
git merge origin/branch2

git branch merged
*integrationBranch
branch2

1
为什么不直接检出 integrationBranch 然后执行 git branch --merged 呢? - Uroc327
非常好的观点。我认为我可以利用这个来做我需要做的事情。谢谢。 - user797963
1
@Uroc327:你甚至不需要检查它:git branch --merged可以带一个可选的提交ID。该提交ID仅仅是默认HEAD(注意,该参数实际上会通过git rev-parse运行;尝试一下git rev-parse HEADgit rev-parse integrationBranch)。 - torek
1
其实,我注意到git branch --merged命令总是遗漏掉第一个合并到发布分支的分支。有什么想法吗? - user797963
1个回答

7
在您的示例中,您需要使用git branch -a --merged integrationBranch
两个分支origin/branch1origin/branch2是远程分支,并且默认情况下不会列在git branch中,因此除非您使用-a开关,否则它们不会显示在输出中。
我猜您看到branch2的原因可能是您可能有一个名为branch2的本地分支已合并(即,问题不是命令删除了第一个分支)。
编辑:
要获取合并到integrationBranch但未合并到master的所有分支,可以执行以下操作:
git branch --list -a --merged integrationBranch | sed 's/^..//;s/ .*//' | xargs git branch --list -a --no-merged master

1
这将返回所有已合并到主分支的分支列表,即使我指定了integrationBranch。例如,git branch -a --merged | wc -l 返回5k个分支,而git branch -a --merged integrationBranch | wc -l 也返回5k个分支。 - user797963
1
啊 - 从你的例子中我并没有清楚地了解到你想要将其与已经合并到 master 的分支进行差异比较。我已经编辑了上面的答案,并提供了一个示例,可以帮助你在不将临时文件写入磁盘的情况下实现这一点。它解决了你的问题吗? - jkyako
出现了这个错误:error: unknown switch `>'。我尝试使用 's/^..//' 来删除 git branch 输出中的前两个空格,并尝试删除 remotes/origin/,只获取分支名称,但仍然出现错误。 - user797963
我应该在测试我的第一次尝试时使用一个有远程的repo。我已经更新了上面的答案,包括 's/ .*//' 来删除远程引用的 " -> origin/master" 输出(这是导致你看到 unknown switch 消息的原因)。 - jkyako
我正在运行1.7.9.5版本。添加列表成功了!这样好多了,谢谢。如果现在我能让它“深入一层”就好了……这样我只能看到从integrationBranch的第一层子节点,如果你把它想象成一棵树的话。真的,非常感谢你的帮助。 - user797963
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接