git branch -d发出警告

时间:2012-08-27 18:20:20

标签: git

我希望在删除本地分支后更好地理解警告消息

  

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

5 个答案:

答案 0 :(得分:48)

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

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

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

答案 1 :(得分:27)

假设您目前已签出master,则表示old_branch中的master所做的更改不存在。但是,他们 出现在old_branch上的origin

答案 2 :(得分:5)

这意味着您的本地分支old_branch与远程old_branch上的远程分支origin保持同步,但它未合并到被认为是分支master的分支old_branch回购中的主要分支。

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


<强>更新

Git警告你不要丢失你的更改。例如,如果您在主git上没有-D,那么就不允许您删除未合并到主服务器的分支(它允许,但使用密钥force-delete,这是{{1}}选项)。

答案 3 :(得分:4)

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

答案 4 :(得分:2)

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

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/myfeature (myfeature 已经推送到远程仓库)
  2. 然后删除 myfeature
  3. 所以 origin/myfeature 仍然存在,即使它没有本地表示

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

不应该在 GitHub/BitBucket/etc.让这更容易?

因为

<块引用>

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

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