Git 分支-d 给出警告

只是想更好地理解删除本地分支后的警告消息

警告: 删除已合并到的分支 'old_branch' 'refs/remotes/origin/old_branch',但尚未合并到 HEAD

38114 次浏览

假设您当前已经签出了 master,这意味着在 old_branch中所做的更改不存在于 master中。然而,它们 存在于 origin上的 old_branch中。

这只是警告您,您已经将更改推送到 origin上的分支,但是它们没有合并到当前签出的分支中,因此您只是在本地删除它。

它警告您,您不再拥有该分支的本地副本,但它存在于 origin

如果还要删除远程分支,请使用 git push --delete origin old_branch

为了补充其他答案,这也可能意味着更改可能被合并到 master,只是您的 master 的本地副本尚未反映它。无论哪种方式,这只是通知您,您的主服务器的本地副本没有您在原始服务器上推动的更改。合并/不合并... 也许是,也许不是

这意味着您的本地分支 old_branch与远程 origin上的远程分支 old_branch是最新的,但是它没有合并到被认为是回购中的主要分支的分支 master

这只是对 Git 的预防措施。它给您一个提示: 也许您在主题分支中完成了工作,但是忘记将其合并到主分支中了?


更新

Git 警告您不要丢失您的更改。例如,如果你没有你的 old_branch对主 git,然后不允许你甚至删除分支是未合并到主(好,它允许,但与关键字 -Dforce-delete选项)。

这里有几个答案是完全正确的,但似乎没有完全澄清这个问题。所以我会再试一次。

问题解释

在执行 拉请求并通过完成 PR 自动删除 GitHub/Bitbucket/等上的一个分支之后,在本地删除分支时会看到这个错误: warning: deleting branch 'old_branch' that has been merged to 'refs/remotes/origin/old_branch', but not yet merged to HEAD.

理解时间轴

GitHub 或任何远程存储库都不知道计算机的本地状态。

当拉请求完成并且它提供删除原始 PR 分支时,它不知道您的本地分支。

此时,删除本地分支。 当地的回收/计算机知道这个时间线:

  1. myfeature = = > origin/myfeature(myfeature已被推到远程回购)
  2. 那么 myfeature就被删除了
  3. 因此,即使 origin/myfeature没有本地表示形式,它仍然存在

当然,这是不正确的,因为 origin/myfeature分支被摧毁时,PR 完成,但您的本地计算机不知道这一点。所以 Git 给了你一个警告。

GitHub/BitBucket 等应该让这变得更简单吗?

因为

删除远程分支

范例是如此普遍,如果远程分支以某种方式通知本地分支这种情况就好了。但是 Git 在 只请求信息,但绝不发送未请求的信息的“单向通信”方面做得非常好。在一个领域的“双向”交流可能会让人们在其他领域也想要它,不久我们就会回到 Git,看起来更像 SVN 或其他“中央存储库”范例,这些范例太脆弱而不能成功。比我懂得更多的人可能会更好地阐述这种“双向沟通”会导致的所有问题。