我有一个具有多个分支的git存储库。
我如何知道哪些分支已经合并到主分支中?
我有一个具有多个分支的git存储库。
我如何知道哪些分支已经合并到主分支中?
当前回答
我区分git分支对git分支-合并的主要如下:
diff <(git branch) <(git branch --merged main)
然后,您将看到尚未合并到main中的任何本地分支。
其他回答
要检查源分支是否已经合并到主分支,可以使用以下bash命令:
git merge-base --is-ancestor <source branch name> master && echo "merged" || echo "not merged"
还有一个图形界面解决方案。只要输入
gitk——所有
一个新的应用程序窗口将提示你的整个回购的图形表示,在那里很容易意识到一个分支是否已经合并
下面是一个小的一行程序,它可以让你知道你当前的分支是否包含了来自远程源/主分支的数据:
$ git fetch && git branch -r --merged | grep -q origin/master && echo Incorporates origin/master || echo Out of date from origin/master
我在做一个特性分支的时候遇到过这个问题,我经常想要确保我把最近的工作合并到我自己单独的工作分支中。
为了泛化这个测试,我在~/.gitconfig中添加了以下别名:
[alias]
current = !git branch -r --merged | grep -q $1 && echo Incorporates $1 || echo Out of date from $1 && :
然后我可以调用:
$ git current origin/master
来检查我是否在运行。
使用git merge-base <commit> <commit>。
该命令在两个提交之间查找最佳共同祖先。如果公共祖先与“分支”的最后一次提交完全相同,那么我们可以安全地假设“分支”已经合并到主分支中。
以下是步骤
在主分支上查找最后一次提交哈希 查找“分支”上的最后一次提交哈希 执行命令git merge-base <commit-hash-step1> <commit-hash-step2>。 如果步骤3的输出与步骤2的输出相同,则“分支”已经合并到master中。
更多关于git merge-base https://git-scm.com/docs/git-merge-base的信息。
关于清理远程分支的主题
git branch -r | xargs -t -n 1 git branch -r --contains
这列出了每个远程分支,然后是它们的最新sha所在的远程分支。
这对于辨别哪些远程分支已合并但未删除,哪些未合并因此正在衰减非常有用。
如果你使用“tig”(它类似于gitk,但基于终端),那么你可以
tig origin/feature/someones-decaying-feature
查看分支的提交历史,而无需git签出