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

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


当前回答

为了验证哪些分支被合并到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 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 branch -r | xargs -t -n 1 git branch -r --contains

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

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

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

tig origin/feature/someones-decaying-feature

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

Git branch -merged master列出并入master的分支

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

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

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

还有一个图形界面解决方案。只要输入

gitk——所有

一个新的应用程序窗口将提示你的整个回购的图形表示,在那里很容易意识到一个分支是否已经合并

我使用以下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
}