我刚删除了一个本地分支,想更好地理解这个警告信息。
警告:正在删除已合并到
'refs/remotes/origin/old_branch'
,但尚未合并到HEAD
的分支'old_branch'
。
我刚删除了一个本地分支,想更好地理解这个警告信息。
警告:正在删除已合并到
'refs/remotes/origin/old_branch'
,但尚未合并到HEAD
的分支'old_branch'
。
这只是提醒您,您已经将更改推送到origin
分支,但是它们尚未合并到当前检出的分支中,因此您仅在本地删除它。
它警告您不再具有该分支的本地副本,但它存在于origin
中。
如果您还想删除远程分支,请使用git push --delete origin old_branch
。
git branch -d branch_name
这个命令,也会收到警告,而这个命令只应该在本地删除分支。为什么在这种情况下还需要警告? - Akshay Damle假设您当前已检出master
,这意味着在old_branch
中进行的更改不会出现在master
中。 但是,在origin
上的old_branch
中它们是存在的。
HEAD
”,这里的HEAD
指的是本地主分支的HEAD
。 - Devyold_branch
与远程origin
上的old_branch
分支保持同步,但尚未合并到被认为是repo中主要分支的master
分支中。old_branch
合并到主git中,则不允许您删除未合并到主分支的分支(虽然可以使用-D
选项进行强制删除)。除了其他答案所述,这也可能意味着更改可能会合并到主分支,只是您本地的主分支副本尚未反映出它。无论哪种方式,这只是告诉您,您的主分支本地副本没有您在源上推送的更改。合并/未合并...也许,也可能不是。
这里的一些回答完全正确,但似乎没有完全解决问题。因此,我将尝试再次解释。
在GitHub/Bitbucket等上执行一个拉取请求(Pull Request)并通过完成拉取请求自动删除分支后,当我尝试删除本地分支时,会看到以下错误消息:
warning: deleting branch 'old_branch' that has been merged to 'refs/remotes/origin/old_branch', but not yet merged to HEAD.
GitHub或其他远程仓库不知道您计算机的本地状态。
当拉取请求被完成并要求删除原始PR分支时,它不知道您的本地分支。
此时,您删除了本地分支。您的本地repo/计算机知道以下时间线:
myfeature
==> origin/myfeature
(myfeature
已经推送到远程仓库)myfeature
origin/myfeature
仍然存在,尽管它没有本地表示当然,这是不正确的,因为origin/myfeature
分支已在完成PR时被销毁,但您的本地计算机不知道这一点。所以,Git会给您一个警告。
因为
PR完成 ==> 删除远程分支
范例是如此普遍,如果远程分支可以以某种方式通知本地分支发生了这种情况,那就好极了。但Git在“单向通信”方面做得非常出色,只有在请求信息时才发送未请求的信息。在某个领域进行"双向通信"可能会使人们想要在其他领域中使用它,很快我们就会回到Git看起来更像SVN或其他"中央仓库"范例的情况,而这些仓库过于脆弱以至于无法成功。比我懂得多的人可能可以更好地解释这种“双向通信”会引起的所有问题。
这意味着你对该分支的更改已经合并到远程(main/master),但却没有合并到本地(main/master)。
为避免这些警告,必须切换到 main/master 并进行拉取操作。