2015-12-14 66 views
8

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

使用gitk --all时,它会显示一个提交(或分支机构)所有其他分支,其中已经合并成。

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

Screenshot of gitk

+0

所以你知道一个命令行的方式来找到它,但想找到一种方法在Sourcetree中专门做到这一点?我不认为它有这个功能。 – tom

+0

是的! (好吧,gitk实际上是内置的git gui,但是除了这方面,它似乎比sourcetree更差......) –

回答

7

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

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仅在git 2.7.0中引入 - 2016年1月4日。例如,见 “Is it possible to filter out merged branches in git for-each-ref?”)

然后调用它的承诺,你想:

invoke custom action

而且将让你分支机构的名单已合并到:

list

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

+0

不幸的是,我发现这毕竟不行。我想显示这个分支合并到的所有分支,而不是其他方式。 (例如,如果我将当前分支合并到master中,则使用您的解决方案,它不会在列表中显示“master”)。 Gitk这样做是正确的... –

+0

@JanRüegg所以像(伪语法):对于每个分支:(git branch --merged abranch | grep currentBranch)' – VonC

+0

@JanRüegg我编辑了一个应该列出的脚本的答案“这个分支的所有分支都合并成了”。你可以测试它吗?它在我身边运作。 – VonC

7

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

View All Branches in SourceTree

该图显示了哪些分支机构已合并到哪里,就像gitk一样。

然而,找出究竟其分支机构已在当前被合并 - 这是它的秘诀是可达HEAD分支机构 - 更容易通过命令行来完成,你可以简单地说:

git branch --merged 

如果你愿意,你也可以包括远程分支机构列表通过添加--all选项:

git branch --all --merged 

找出哪些分支机构有当前一个被合并也很简单:

git branch --no-merged 
+0

感谢您的帮助!我用截图澄清了这个问题,以显示我希望在SourceTree中“查找”哪个部分的gitk。但是,也许毕竟不使用sourcetree作为该功能更容易,正如您所描述的那样... –

+0

正如在其他答案的评论中所述,这也不起作用!我想知道当前分支已合并到哪个分支,而不是相反! –