【问题标题】:Can I make git smarter when figuring out if it's okay to delete a branch?在确定是否可以删除分支时,我可以让 git 更智能吗?
【发布时间】:2011-06-27 04:40:23
【问题描述】:

git branch -d 对于分支是否有我尚未合并的代码几乎总是错误的。很多时候,我会从 ma​​ster 中分离出 foo,完成工作,然后将其合并回 ma​​ster,但随后 git branch -d 说“分支 'foo' 没有完全合并”,直到我将 master 合并回 foo(这有时很痛苦)。

【问题讨论】:

  • 一旦你合并了一个分支,你应该不会收到这个消息。 git 检查分支 foo 的所有提交是否可以从分支 master 访问。只有在 foo 中有新的(未合并的)提交时,它才会抱怨。你用的是什么版本的git?你能发布一个简单的测试用例来重现这种行为吗?

标签: git merge branch


【解决方案1】:

您不必将某些内容合并到 foo 中即可删除 foo

根据我的经验,标准是foo是否合并到HEAD中,所以也许你应该确保ma​​ster 是您尝试删除 foo 时的当前分支。

【讨论】:

  • 是的,我很确定。我所质疑的分支有可能被合并到一个 bar 中,然后又被合并到 master 中……我认为 git 应该足够聪明,可以看到这些变更集存在于 master 中。
  • 嗯,实际上在这种情况下,看起来我压缩了 foo 的提交,所以它们有不同的参考。但我很确定我上面描述的情况已经发生了。
  • gitkgit log之类的东西看看foo的尖端是否可以从你当前的头部到达。
【解决方案2】:

在这种情况下,我似乎压制了 foo 的提交

这将与“未完全合并”警告一致(具有无法从任何其他 ref 头访问的提交的分支)

可以进行两次检查:

1/ “Git and “The branch 'x' is not fully merged” Error”的问题很有趣:

git log --graph --left-right --cherry-pick --oneline master...foo

2/ 见“Using Git, show all commits that are in one branch, but not the other(s)

git branch --contains branch-to-delete

应该返回多个分支

【讨论】:

    【解决方案3】:

    做一个

    git rebase master foo
    

    在您合并所有内容之后。那么git branch -d foo 应该会成功

    【讨论】:

      【解决方案4】:
      #!/bin/sh
      # Get rid of all the branches I don't care about.
      
      for b in $(git branch) ; do
        git rebase master ${b}
        if test $? -ne 0; then git rebase --abort ; fi
        git checkout -f master
      done
      
      for b in $(git branch) ; do git branch -d ${b} ; done
      

      【讨论】:

      • 这是一个非常糟糕的主意 - 你真的曾经想要盲目地重新设置你所有的分支。
      猜你喜欢
      • 2015-11-06
      • 1970-01-01
      • 2014-03-18
      • 2014-05-28
      • 1970-01-01
      • 2019-09-02
      相关资源
      最近更新 更多