119

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

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

4

5 回答 5

80

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

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

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

于 2012-08-27T18:27:06.867 回答
40

假设您当前已master签出,这意味着在 中所做的更改old_branch不存在于master. 但是,它们存在old_branchorigin.

于 2012-08-27T18:24:11.820 回答
9

这意味着您的本地分支与远程远程old_branch分支是最新的,但它没有合并到被认为是 repo 中的主分支的分支。old_branchoriginmaster

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


更新

Git 会警告您不要丢失更改。例如,如果您没有old_branch在主 git 上,则不允许您删除未合并到主 git 的分支(当然它允许,但带有选项的键-Dforce-delete

于 2015-03-06T06:10:02.813 回答
8

要添加到其他答案,这也可能意味着更改可能会合并到主控,只是您的主控本地副本尚未反映它。无论哪种方式,这只会告诉您,您的 master 的本地副本没有您在 origin 上推送的更改。合并/未合并...也许,也许不是

于 2015-03-06T06:01:37.510 回答
5

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

OP 问题释义

在我执行拉取请求并删除 GitHub/Bitbucket/etc 上的分支之后。通过完成 PR 自动完成,然后我在本地删除分支时看到此错误: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/myfeaturemyfeature已被推送到远程仓库)
  2. 然后myfeature被删除
  3. 所以origin/myfeature仍然存在,即使它没有本地代表

当然,这不是真的,因为origin/myfeaturePR 完成时分支被破坏了,而你的本地计算机并不知道这一点。所以,Git 给了你警告。

不应该是 GitHub/BitBucket/等。让这更容易?

因为

PR 完成 ==> 远程分支已删除

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

于 2021-02-01T14:17:32.523 回答