【问题标题】:Worktree branches in git show unmerged even after merginggit中的工作树分支即使在合并后也显示未合并
【发布时间】:2020-12-15 06:23:33
【问题描述】:

我经常使用git add worktree wtname 来创建单独的分支。当我将分支 wtname 上的更改合并到 master 时,我希望 git branch --no-merged 不应该列出 wtname 分支。但是,确实如此。更糟糕的是,即使删除了工作树:

rm -rf wtname
git worktree remove wtname

除非我强制删除它,否则我无法删除此分支。在上面写的命令之后,如果我运行git branch -d wtname,它会抛出以下错误:

error: The branch 'wtname' is not fully merged.
If you are sure you want to delete it, run 'git branch -D wtname'.

为什么会这样?

【问题讨论】:

  • 你没有展示你是如何进行合并的,但如果你使用了git merge --squash 或 GitHub PR,很有可能该分支从未真正合并过,Git 的抱怨是完全合理的。
  • (只是重复 torek 的评论)你能解释一下你是如何将你的分支合并到 master 的吗?
  • 我没有使用壁球。我只是在 master 上合并:git merge wtname
  • 我必须指出,只有当我通过添加单独的工作树而不是普通分支来创建分支时才会发生这种情况。
  • “只有当我通过添加单独的工作树创建分支时才会发生这种情况”是的,但对于其他人根本不会发生。您能否提供一系列命令以重现问题?

标签: git git-branch git-worktree


【解决方案1】:

你没有向我们展示你的真实代码,但一个反例足以反驳这个假设,所以这里有一个小游戏,我们在工作树中创建一个新分支,在那个分支上工作,然后合并它——然后删除工作树和分支。无论您在做什么与此不同,在不同程度上,都可能是错误的。也许您错误地创建了工作树?仔细观察我的所作所为:

$ mkdir git
$ cd git
$ git init

$ echo a > a.txt; git add .; git commit -m'a'
$ echo b > a.txt; git add .; git commit -m'b'

$ git worktree add -b br ../br
$ cd ../br

$ echo c > a.txt; git add .; git commit -m'c'
$ echo d > a.txt; git add .; git commit -m'd'
$ cd ../git

$ echo e > e.txt; git add .; git commit -m'e'
$ git merge br

$ git branch --no-merged # nothing
$ git worktree remove br
$ git branch -d br

【讨论】:

    【解决方案2】:

    当我将分支 wtname 上的更改合并到 master 时

    这在我的嫌疑人名单中名列前茅。当您让git worktree add 默认创建一个分支时,它不会跟踪任何内容。当你git branch -d 一个分支时,如果它没有跟踪任何东西,它的安全检查就是针对你当前的结帐。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      • 2012-03-21
      相关资源
      最近更新 更多