我怎么能在git中知道分支是否已经被合并到master?

我有一个Git仓库与多个分支。

我怎样才能知道哪些分支已经合并到主分支?

git branch --merged master列表分支合并到

git branch --merged合并列表分支合并到HEAD (即当前分支的提示)

git branch --no-merged列表没有被合并的分支

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

您可以使用git merge-base命令来查找两个分支之间的最新常见提交。 如果该提交与您的分支头相同,那么分支已经完全合并。

请注意, git branch -d已经这样做了,因为它会拒绝删除尚未完全合并的分支。

还有一个graphics界面解决scheme。 只要input

gitk --all

一个新的应用程序窗口将提示您的整个回购的graphics表示,这是很容易实现,如果分支已经合并或不

关于清理远程分支的问题

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

这列出了每个远程分支,以及他们最近的SHA所在的远程分支。

这对于辨别哪些远程分支已经被合并但不被删除以及哪些没有被合并并因此正在衰减是有用的。

如果你使用'tig'(它像gitk,但基于terminal),那么你可以

 tig origin/feature/someones-decaying-feature 

看到一个分支的提交历史,而不必去结账

使用git merge-base <commit> <commit>

这个命令find两个提交之间最好的共同祖先。 如果共同的祖先与“分支”的最后一次提交是相同的,那么我们可以安全地假设一个“分支”已经合并到了主分支中。

这是步骤

  1. 在主分支上查找最后一个提交哈希
  2. 在“分支”上查找最后一个提交哈希
  3. 运行命令git merge-base <commit-hash-step1> <commit-hash-step2>
  4. 如果步骤3的输出与步骤2的输出相同,则“分支”已经合并到主设备中。

有关git merge-base的更多信息https://git-scm.com/docs/git-merge-base

当我需要弄清楚一个分支是否被合并,即使它可能已经重新升级到我们的主分支(这是function分支的一个常见的场景)时,这里是我的技术。

这两种方法都不是愚蠢的,但我发现它们有用很多次。

1显示所有分支的日志

使用像gitk或TortoiseGit这样的可视化工具,或者简单地使用–all来查看所有合并到主分支的历史logging。 你应该能够发现这个特定的function分支是否被合并。

2在function分支中合并时始终移除远程分支

如果您在合并function分支时总是删除本地和远程分支,那么您可以简单地在其他计算机上更新和修剪远程控制,function分支将消失。

为了帮助记住这样做,我已经使用gitstream程扩展(AVH版本)来创build和合并我的function分支本地,所以我添加了下面的gitstream挂钩问我是否也想自动删除远程分支。

示例创build/完成function分支

 554 Andreas:MyRepo(develop)$ git flow start tmp Switched to a new branch 'feature/tmp' Summary of actions: - A new branch 'feature/tmp' was created, based on 'develop' - You are now on branch 'feature/tmp' Now, start committing on your feature. When done, use: git flow feature finish tmp 555 Andreas:MyRepo(feature/tmp)$ git flow finish Switched to branch 'develop' Your branch is up-to-date with 'if/develop'. Already up-to-date. [post-flow-feature-finish] Delete remote branch? (Y/n) Deleting remote branch: origin/feature/tmp. Deleted branch feature/tmp (was 02a3356). Summary of actions: - The feature branch 'feature/tmp' was merged into 'develop' - Feature branch 'feature/tmp' has been locally deleted - You are now on branch 'develop' 556 Andreas:ScDesktop (develop)$ 

git的/钩/stream后的function完成

 NAME=$1 ORIGIN=$2 BRANCH=$3 # Delete remote branch # Allows us to read user input below, assigns stdin to keyboard exec < /dev/tty while true; do read -p "[post-flow-feature-finish] Delete remote branch? (Y/n) " yn if [ "$yn" = "" ]; then yn='Y' fi case $yn in [Yy] ) echo -e "\e[31mDeleting remote branch: $2/$3.\e[0m" || exit "$?" git push $2 :$3; break;; [Nn] ) echo -e "\e[32mKeeping remote branch.\e[0m" || exit "$?" break;; * ) echo "Please answer y or n for yes or no.";; esac done # Stop reading user input (close STDIN) exec <&- exit 0 

3通过提交消息search

如果你不总是删除远程分支,你仍然可以search类似的提交来确定分支是否被合并。 这里的缺点是如果远程分支已经重新变成不可识别的,比如压扁提交或改变提交消息。

  • 取出和修剪所有遥控器
  • 查找function分支上最后一次提交的消息
  • 查看是否可以在主分支上find具有相同消息的提交

主分支上的示例命令:

 gru gls origin/feature/foo glf "my message" 

在我的bash .profileconfiguration

 alias gru='git remote update -p' alias glf=findCommitByMessage findCommitByMessage() { git log -i --grep="$1" }