【问题标题】:Sourcetree: Find out if a branch is mergedSourcetree:找出一个分支是否被合并
【发布时间】:2015-12-14 15:20:38
【问题描述】:

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

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

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

【问题讨论】:

  • 所以您知道命令行的查找方法,但想在 Sourcetree 中找到专门的方法?我不认为它有这个功能。
  • 是的! (嗯,gitk其实就是内置的git gui,但是除了这方面,它似乎不如sourcetree……)

标签: git git-merge atlassian-sourcetree sourcetree


【解决方案1】:

相当于在SourceTree 中运行gitk --all 就是从左上角的下拉列表中选择All Branches

图表显示了哪些分支在哪里合并,就像gitk 所做的那样。

但是,确切找出哪些分支已合并到当前分支中 - 即从 HEAD 中可以到达的分支 - 更容易从命令行,你可以简单地说:

git branch --merged

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

git branch --all --merged

找出当前分支中合并的分支同样简单:

git branch --no-merged

【讨论】:

  • 感谢您的帮助!我用截图澄清了这个问题,以显示我想在 SourceTree 中“找到”gitk 的哪一部分。但是,正如您所描述的那样,对于该功能不使用 sourcetree 可能更容易......
  • 正如评论中提到的另一个答案,这也不起作用!我想知道当前分支被合并到了哪些分支,而不是反过来!
【解决方案2】:

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

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

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

它应该在您的%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?”)

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

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

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

【讨论】:

  • 不幸的是,我发现这毕竟行不通。我想显示这个分支合并到的所有分支,而不是相反。 (例如,如果我将当前分支合并到 master 中,使用您的解决方案它不会在列表中显示“master”)。 Gitk 正确地做到了这一点……
  • @JanRüegg 类似(伪语法):for each branches: (git branch --merged abranch|grep currentBranch)
  • @JanRüegg 我已经用一个脚本编辑了答案,该脚本应该列出“这个分支合并到的所有分支”。你能测试一下吗?它对我有用。
  • 哇,好快,非常感谢!我设法让脚本通过 sourcetree 运行,但随后我收到许多类似这样的错误:“错误:未知选项 `merged' 用法:git for-each-ref [options] [] ...”。我还在尝试找出问题所在...
  • @JanRüegg 请确保您已安装 git 2.7.0。
猜你喜欢
  • 2015-04-19
  • 1970-01-01
  • 2017-08-06
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
相关资源
最近更新 更多