当前位置:  开发笔记 > 编程语言 > 正文

我怎么知道分支是否已经合并为主分支?

如何解决《我怎么知道分支是否已经合并为主分支?》经验,为你挑选了8个好方法。

我有一个包含多个分支的git存储库.

我怎么知道哪些分支已经合并到主分支中?



1> hectorsq..:

git branch --merged master列表分支合并为主

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

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

默认情况下,这仅适用于本地分支.该-a标志将显示本地和远程分支,并且该-r标志仅显示远程分支.


显然,`git branch -a --merged/no-merged`也可以工作,而不需要在流程中创建本地跟踪分支.
或者只是`git branch -r --merged/ - no-merged`才能找到远程分支.
注意,`--merged/ - no-merged`在它之后接受一个可选的commit参数.至少在我的git版本(1.9.1)中,添加`-a`或`-r`标志后会给我一个致命的错误.添加`-a`或`-r` _before_` - (no-)merged`.
有没有办法删除在重新定位后实际合并的未合并分支?
只是旁注,当我试图查看远程分支是否已合并时,我首先设置本地跟踪分支,使用`git branch --merged'识别状态,然后删除本地和远程分支.

2> Greg Hewgill..:

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

需要注意的是git branch -d做这样的事情已经因为它会拒绝删除该分支还没有已经完全合并.


@hari的[回答](/sf/ask/17360801/)详细介绍了如何使用它.

3> iberbeu..:

还有一个图形界面解决方案.只需输入

gitk --all

一个新的应用程序窗口将提示您整个仓库的图形表示,如果分支已经合并,很容易实现


需要说明的是,需要安装不属于`git`客户端的应用程序.在Ubuntu上,`apt-get install gitk`.

4> Carl G..:

我正在使用以下bash函数: git-is-merged develop 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
}


这实际上是行不通的。如果源分支已经被合并到目标分支中,然后目标分支又得到了几次提交,它将不再起作用,但是我不知道为什么

5> Hari..:

使用git merge-base .

此命令查找两次提交之间的最佳共同祖先.如果共同的祖先与"分支"的最后一次提交相同,那么我们可以安全地假设"分支"已经合并到主分支中.

这是步骤

    在master分支上查找最后一次提交哈希

    在"分支"上查找上次提交哈希

    运行命令git merge-base .

    如果步骤3的输出与步骤2的输出相同,则"分支"已经合并到主设备中.

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


我想这只会告诉你这些提示是否合并.例如,这不会告诉你`master`是否被合并到`branch`,然后又有4个提交被添加到`branch`中.

6> xxjjnn..:

关于清理远程分支的主题

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

这将列出每个远程分支,然后是最新的SHA所在的远程分支.

这有助于辨别哪些远程分支已合并但未删除,哪些远程分支尚未合并且因此正在衰减.

如果你正在使用'tig'(它像gitk但是基于终端)那么你可以

tig origin/feature/someones-decaying-feature

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


做得好那个男人!一旦你了解它实际显示的内容,它就非常有用!GitHub应用程序需要将其合并到您的分支的可视化显示中,而不是没有层次结构的字母表列表!

7> avivamg..:

为了验证哪些分支合并到master,您应该使用以下命令:

git branch --merged master 合并到master的所有分支的列表。

git branch --merged master | wc -l 合并到master的所有分支的数量。

标志是:

-a标志- (全部)显示远程和本地分支

-r标志- (远程)仅显示远程分支

- 仅显示本地分支机构

例如: git branch -r --merged master将向您显示所有合并到主数据库的远程存储库。



8> angularsen..:

当我需要弄清楚一个分支是否已经合并时,这是我的技术,即使它已经被重新定义为与我们的主分支最新,这是特征分支的常见场景.

这些方法都不是万无一失的,但我发现它们很有用.

1显示所有分支的日志

使用像gitk或TortoiseGit这样的可视化工具,或者简单地使用--all进行git log,浏览历史记录以查看与主分支的所有合并.您应该能够发现此特定功能分支是否已合并.

2在功能分支中合并时始终删除远程分支

如果您习惯在合并功能分支时始终同时删除本地和远程分支,则只需更新并修剪其他计算机上的远程分支,功能分支就会消失.

为了帮助记住这样做,我已经在使用git flow扩展(AVH版本)在本地创建和合并我的功能分支,所以我添加了以下git flow hook来询问我是否还想自动删除远程分支.

示例创建/完成功能分支

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的/钩/流后的功能完成

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按提交消息搜索

如果您不总是删除远程分支,您仍然可以搜索类似的提交以确定分支是否已合并.这里的缺陷是,如果远程分支已经变为无法识别,例如压缩提交或更改提交消息.

获取并修剪所有遥控器

在功能分支上查找上次提交的消息

查看是否可以在master分支上找到具有相同消息的提交

主分支上的示例命令:

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

在我的bash .profile配置中

alias gru='git remote update -p'
alias glf=findCommitByMessage

findCommitByMessage() {
    git log -i --grep="$1"
}

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有