我有一个具有多个分支的git存储库。
我如何知道哪些分支已经合并到主分支中?
我有一个具有多个分支的git存储库。
我如何知道哪些分支已经合并到主分支中?
当前回答
您可以使用git merge-base命令来查找两个分支之间的最新公共提交。如果该提交与分支头相同,则该分支已经完全合并。
注意,git branch -d已经做了这类事情,因为它将拒绝删除尚未完全合并的分支。
其他回答
我使用以下bash函数:git-is-merged development feature/new-feature
git-is-merged () {
merge_destination_branch=$1
merge_source_branch=$2
merge_base=$(git merge-base $merge_destination_branch $merge_source_branch)
merge_source_current_commit=$(git rev-parse $merge_source_branch)
if [[ $merge_base = $merge_source_current_commit ]]
then
echo $merge_source_branch is merged into $merge_destination_branch
return 0
else
echo $merge_source_branch is not merged into $merge_destination_branch
return 1
fi
}
使用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 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
来检查我是否在运行。
为了验证哪些分支被合并到master中,你应该使用这些命令:
Git branch <flag[-r/-a/none]>——merged master所有分支合并到master的列表。 Git branch <flag[-r/-a/none]>——merged master | wc -l count并入master的所有分支的数量。
标志是:
-a flag - (all)显示远程分支和本地分支 -r flag - (remote)仅显示远程分支 <emptyFlag> -只显示本地分支
例如:git branch -r——merged master将显示所有合并到master的远程存储库。
您可以使用git merge-base命令来查找两个分支之间的最新公共提交。如果该提交与分支头相同,则该分支已经完全合并。
注意,git branch -d已经做了这类事情,因为它将拒绝删除尚未完全合并的分支。