Sourcetree:确定分支是否合并

时间:2015-12-14 15:20:38

标签: git git-merge atlassian-sourcetree sourcetree

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

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

澄清我的意思是屏幕截图:包围(红色)区域显示当前提交所属的所有分支。它也可以在SourceTree中显示吗?

Screenshot of gitk

2 个答案:

答案 0 :(得分:8)

相当于在SourceTree中运行gitk --all,就是从左上角的下拉列表中选择所有分支

View All Branches in SourceTree

图表显示哪些分支已合并到哪里,就像gitk那样。

然而,找出完全哪些分支已合并到当前的分支 - 即HEAD中提示可到达的分支 - 更容易从命令行完成,你可以简单地说:

git branch --merged

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

git branch --all --merged

找出哪些分支已合并到当前分支中同样容易:

git branch --no-merged

答案 1 :(得分:7)

  

但也许更容易将SourceTree用于该功能

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

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

Custom action

它应该在%PATH% git-bm中调用脚本(请参阅this answer as an example

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

这将列出您可以从中访问当前SHA1的所有分支(也就是说“已合并当前分支的所有分支”)

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

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

invoke custom action

并且会获得它已合并到的分支列表:

list

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