git分支-d发出警告
只是想更好地理解我删除本地分支后的警告消息 警告:正在删除已合并到的分支git分支-d发出警告,git,Git,只是想更好地理解我删除本地分支后的警告消息 警告:正在删除已合并到的分支“旧分支” 'refs/remotes/origin/old_branch',但尚未合并到HEAD 假设您当前签出了master,这意味着在old_分支中所做的更改在master中不存在。但是,它们存在于origin上的old_分支中,这只是警告您,您已将更改推送到origin上的分支,但它们未合并到当前签出的分支中,因此您仅在本地删除它 它警告您,您不再拥有该分支的本地副本,但它存在于origin 如果您还想删除远程分支,
“旧分支”
'refs/remotes/origin/old_branch'
,但尚未合并到HEAD
假设您当前签出了
master
,这意味着在old_分支中所做的更改在master
中不存在。但是,它们存在于origin
上的old_分支中,这只是警告您,您已将更改推送到origin
上的分支,但它们未合并到当前签出的分支中,因此您仅在本地删除它
它警告您,您不再拥有该分支的本地副本,但它存在于origin
如果您还想删除远程分支,请使用git push--delete origin old_branch
将其添加到其他答案中,这也意味着更改可能会合并到master,只是您的master本地副本尚未反映它。无论哪种方式,这都只是通知您,主控形状的本地副本没有您在源上推送的更改。合并/未合并…可能,可能不这意味着您的本地分支机构旧分支机构
与远程原点上的远程分支机构旧分支机构
是最新的,但未合并到分支机构主分支机构
,该分支机构被视为回购协议中的主要分支机构
这只是git的一个预防措施。它给了你一个提示:也许你在主题分支中完成了你的工作,但忘记了将它合并到主分支
更新
Git警告您不要丢失更改。例如,如果主git上没有您的旧分支
,那么甚至不允许您删除未合并到主git的分支(它允许,但使用键-D
,即强制删除
选项)。这里的几个答案完全正确,但似乎没有完全澄清问题。因此,我将尝试另一种尝试
问题的解释
在我执行拉取请求并通过完成PR自动删除GitHub/Bitbucket/等上的分支后,我在本地删除分支时看到此错误:警告:删除已合并到“refs/remotes/origin/old_branch”但尚未合并到HEAD的分支“old_branch”。
理解时间线
GitHub或任何远程存储库都不知道您机器的本地状态
当拉取请求完成并提供删除原始PR分支时,它不知道您的本地分支
此时,您将删除本地分支。您的本地回购/计算机知道此时间线:
myfeature
==>origin/myfeature
(myfeature
已推送到远程回购)
然后删除myfeature
因此,origin/myfeature
仍然存在,即使它没有本地表示
当然,这不是真的,因为当PR完成时,origin/myfeature
分支被破坏,但是您的本地计算机不知道这一点。所以Git给了你警告
GitHub/BitBucket等不应该让这更容易吗?
因为
PR完成==>远程分支已删除
范例是如此普遍,如果远程分支以某种方式将此事件通知本地分支,那就太好了。但是Git在“单向通信”方面做得非常好,您只请求信息,而从不发送未请求的信息。一个领域中的“双向”通信可能会让人们在其他领域也需要它,很快我们又回到Git,看起来更像SVN或任何其他太脆弱而无法成功的“中央存储库”范例。比我了解得更多的人可能可以更好地阐述这种“双向通信”可能会导致的所有问题。不一定是master
,而是当前的头
。因此,-D是指没有与任何远程分支共享要删除的分支(实际上是提交)。虽然警告是通知您已经与远程服务器共享了分支(提交),但它只是没有合并到HEAD中。头部为头部,远程/参考/头部不同。但是,如果我在远程头和本地头之间的区别上有错误,请纠正我。如果您合并--挤压您的旧分支,则在本地删除它时,您将始终收到此警告。当挤压时,索引被重置,因此与旧的分支标题不匹配,而其他答案是正确的,Antoine的评论是原因,至少在我的案例中是这样。是的。这是正确的答案!“但尚未合并到头
”,此处的头
引用本地主分支的头。但origin/old_分支合并到origin/master。后来我在master branch上做了git拉原点。还是一样的错误。这不是GH中的错误吗?@vikramvi假设您已在本地签出master
,如果任何提交的SHA发生更改,它仍然可能发生;i、 e.您将原点/旧分支
重设为原点/主分支
。即使是快进,这也会为来自源代码/old_分支
的每个新提交生成一个新的SHA,使git在将更改拉到本地主分支
后,将本地旧分支
中的原始SHA视为未合并。您可以查看和了解发生这种情况的原因。是的,master
与此无关。你指的是现在的分支机构,而不是现在的分支机构<代码>;)
即使我执行了git branch-d branch\u name
操作,也会收到此警告,该操作应该只在本地删除分支。为什么在这种情况下需要警告?但是origin/old_分支合并到origin/master中。后来我在master branch上做了git拉原点。还是一样的错误。这不是吗