git branch -d发出警告

use*_*228 72 git

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

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

cjh*_*eal 57

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

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

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

  • 是的,`master`没有参与其中.你的意思是当前的分支.`)` (7认同)
  • 即使我执行“gitbranch -dbranch_name”,我也会收到此警告,该命令应该只在本地删除分支。为什么在这种情况下需要警告? (3认同)
  • 但是origin / old_branch合并到了origin / master中。后来我在主分支上做了git pull origin。还是一样的错误。这不是GH中的错误吗? (2认同)

Kar*_*ldt 30

假设您目前已master签出,则表示所做的更改old_branch不存在master.然而,他们出现在old_branchorigin.

  • @vikramvi 假设您在本地签出了 `master`,如果任何提交的 SHA 发生更改,它仍然可能发生;即您将“origin/old_branch”重新设置为“origin/master”。即使它是快进,这也会为来自 `origin/old_branch` 的每个新提交生成一个新的 SHA,导致 git 在将更改拉取到本地 `master 后,将本地 `old_branch` 中的原始 SHA 视为未合并` 分支。您可以查看[此答案](/sf/answers/3403885481/)和[此答案](/sf/answers/3204725261/)了解发生这种情况的原因。 (4认同)
  • 是的.这是正确的答案!"但尚未合并到`HEAD`",这里的`HEAD`引用了本地主分支的HEAD. (3认同)
  • 但是origin / old_branch合并到了origin / master中。后来我在主分支上做了git pull origin。还是一样的错误。这不是GH中的错误吗? (2认同)

Mik*_*son 7

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

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/etc。让这变得更容易吗?

因为

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

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

  • 进一步说明:可能值得阅读 [`git prune`](https://www.git-tower.com/learn/git/faq/cleanup-remote-branches-with-git-prune/),因为当您有指向不再工作的远程分支的指针时,这是清除任何“额外垃圾”的简单方法。 (2认同)

Mit*_*air 6

要添加其他答案,这也可能意味着更改可能会合并到主数据库,只是您的主数据库的本地副本尚未反映出来。无论哪种方式,这都只会通知您母版的本地副本没有在原点上推送的更改。合并/未合并...也许,也许不是


Max*_*hev 5

这意味着你的本地分支old_branch是最新的远程分支old_branch远程origin但不合并到分支master被认为是回购的主要分支.

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


更新

Git警告你不要丢失你的更改.例如,如果你没有使用old_branchmaster git,那么不要让你甚至删除未合并到master的分支(它允许,但是使用key -Dforce-delete选项).

  • 不一定是`master`,而是当前的`HEAD`. (7认同)