我如何知道分支(或提交)是否合并到 SourceTree 中?
使用时gitk --all
,它将显示提交(或分支)foo所有其他分支,其中foo已合并到其中。
为了澄清我的意思是截图:圈出的(红色)区域显示了当前提交所属的所有分支。这也可以显示在 SourceTree 中吗?
我如何知道分支(或提交)是否合并到 SourceTree 中?
使用时gitk --all
,它将显示提交(或分支)foo所有其他分支,其中foo已合并到其中。
为了澄清我的意思是截图:圈出的(红色)区域显示了当前提交所属的所有分支。这也可以显示在 SourceTree 中吗?
gitk --all
在SourceTree中运行的等价物是从左上角的下拉列表中选择All Branches :
该图显示了哪些分支已合并到哪里,就像这样gitk
做一样。
但是,从命令行更容易地找出当前分支中已合并的分支——即可以从其提示到达的HEAD
分支——更容易从命令行完成,您可以简单地说:
git branch --merged
如果需要,您还可以通过添加选项在列表中包含远程分支:--all
git branch --all --merged
找出当前分支中没有合并的分支同样简单:
git branch --no-merged
但也许不将 SourceTree 用于该功能毕竟更容易
您可以使用SourceTree 中定义的自定义操作并列出这些合并的分支。
那不像 gitk 那样集成,但至少,你不必切换工具。
首先定义一个自定义操作,$SHA
用于获取选定的提交:
%PATH%
它应该在您的调用中调用一个脚本git-bm
(以这个答案为例)
#!/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 日。例如,请参阅“是否可以过滤掉合并的分支git for-each-ref
? ”)
然后在您想要的提交上调用它:
并将为您提供已合并到的分支列表:
这是一种解决方法,但至少您不会离开 SourceTree。