我有一个具有多个分支的git存储库。

我如何知道哪些分支已经合并到主分支中?


当前回答

使用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 -merged master列出并入master的分支

git branch—merged列出合并到HEAD中的分支(即当前分支的尖端)

Git branch -no-merged列出未合并的分支

默认情况下,这只适用于本地分支。-a标志将显示本地和远程分支,而-r标志仅显示远程分支。

关于清理远程分支的主题

git branch -r | xargs -t -n 1 git branch -r --contains

这列出了每个远程分支,然后是它们的最新sha所在的远程分支。

这对于辨别哪些远程分支已合并但未删除,哪些未合并因此正在衰减非常有用。

如果你使用“tig”(它类似于gitk,但基于终端),那么你可以

tig origin/feature/someones-decaying-feature

查看分支的提交历史,而无需git签出

我使用git for-each-ref来获得一个分支列表,这些分支要么被合并,要么没有合并到给定的远程分支中(例如origin/integration)。

遍历所有匹配<pattern>的引用,并根据给定的<format>对它们进行排序,然后根据给定的<key>集对它们进行排序。

注意:如果你倾向于使用git pull而不是git fetch,请将origin/integration替换为integration。

合并到远程起源/集成分支的本地分支列表

git for-each-ref --merged=origin/integration --format="%(refname:short)" refs/heads/
#                ^                           ^                           ^
#                A                           B                           C
branch1
branch2
branch3
branch4

答:只取合并到远程原点/集成分支中的分支 B:打印分支机构名称 C:只看头部(即树枝)

未合并到远程起源/集成分支的本地分支列表

git for-each-ref --no-merged=origin/integration --format="%(committerdate:short) %(refname:short)" --sort=committerdate refs/heads
#                ^                              ^                                                  ^                    ^
#                A                              B                                                  C                    D
2020-01-14 branch10
2020-01-16 branch11
2020-01-17 branch12
2020-01-30 branch13

答:只取未合并到远程原点/集成分支的分支 B:打印分支名称和最后提交日期 C:按提交日期排序输出 D:只看头部(即树枝)

要检查源分支是否已经合并到主分支,可以使用以下bash命令:

git merge-base --is-ancestor <source branch name> master && echo "merged" || echo "not merged"

使用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的信息。