Sourcetree:查看一个分支是否被合并

Sourcetree: Find out if a branch is merged

我如何知道分支(或提交)是否已合并到 SourceTree 中?

当使用 gitk --all 时,它将显示提交(或分支)foo 所有其他分支,其中 foo已经合并到.

为了阐明我的意思截图:圆圈(红色)区域显示了当前提交所属的所有分支。这也可以显示在 SourceTree 中吗?

运行 gitk --allSourceTree 中的等价物是从左上角的下拉列表中选择 All Branches角落:

该图显示了哪些分支已在何处合并,就像 gitk 所做的那样。

然而,找出确切哪些分支已合并到当前分支中——即提示可达的分支来自HEAD – 从命令行更容易完成,您可以简单地说:

git branch --merged

如果需要,您还可以通过添加 --all 选项将 远程分支 包含在列表中:

git branch --all --merged

找出哪些分支没有被合并到当前分支中同样简单:

git branch --no-merged

But maybe it is easier after all to not use SourceTree for that feature

您可以使用在 SourceTree 中定义的自定义操作并列出那些合并的分支。
这不像 gitk 那样集成,但至少,您不必切换工具。

首先定义一个custom action, using $SHA for getting the selected commit:

它应该在您的 %PATH% 中调用一个名为 git-bm 的脚本(参见

#!/bin/sh
for branch in $(git for-each-ref --format="%(refname:short)" refs/heads/); do
  if [ "${branch}" != "" ]; then
    t=$(git for-each-ref --format="%(refname:short)" --merged "${branch}" refs/heads/|grep -v "${branch}"|grep "")
    if [ "${t}" != "" ]; then
      echo "${branch}"
    else
      t=$(git branch --contains "" | grep "${branch}")
      if [ "${t}" != "" ]; then
        echo "${branch}"    
      fi
    fi
  fi
done

这将列出您可以访问当前 SHA1 的所有分支(也就是说 "all branches in which the current branch has been merged")

(注意:语法 git for-each-ref --merged 仅在 git 2.7.0 中引入 - 2016 年 1 月 4 日。例如,参见“Is it possible to filter out merged branches in git for-each-ref?”)

然后在你想要的提交上调用它:

并且会为您提供已合并到的分支列表:

这是一种解决方法,但至少您不会离开 SourceTree。