目标:删除名为“branchname”的远程分支
我过去做的步骤是: [第一种方法]
今天我尝试使用相同的上述步骤删除,但遇到了如下所述的问题:
$ git branch -d branchname
warning: deleting branch 'branchname' that has been merged to
'refs/remotes/origin/branchname', but not yet merged to HEAD.
Deleted branch branchname (was f394ddc).
prash ~/folder/project1 (branch1)
$ git push origin branchname
Enter passphrase for key '/c/Users/prash/.ssh/id_rsa':
error: src refspec branchname does not match any.
error: failed to push some refs to 'ssh://git@abc.xyz/projname.git'
最后,我能够通过不同的方法删除 [第二种方法]
$ git push origin --delete branchname
问题,
你知道为什么我不能按照第一种方法删除远程分支吗? 还有,为什么要警告?
修改
我尝试通过创建和删除远程分支来复制第一个问题,这次我做的唯一更改是在我错过早期的branchname之前添加一个冒号,并且它被删除了。不确定这是否是之前的原因。
答案 0 :(得分:6)
在你的第一个例子中,推送失败的原因是因为你做了
git push origin branchname
而不是
git push origin :branchname
结肠显着;这是推动分支和删除分支之间的区别。这里的单字符差异是为什么git push origin --delete branchname
通常是一个更安全的命令。
由于您已删除branchname
,当您尝试推送git
时,branchname
说“我不知道origin
是什么,因为我没有这个名称的分支“并没有推动任何事情。
您可能认为在本地删除分支只是将该分支标记为“已删除”,因此当您推送该分支时,branchname
的{{1}}版本也会被标记为“已删除”,但这不是git
删除分支的方式。当您在本地删除分支时,分支将永远消失(尽管属于该分支的提交仍然存在,因此您可以通过查看git reflog
来恢复它。)
关于HEAD
的初始警告,git
正试图确保您不会丢失任何数据。
每个分支都可以有一个与其关联的“上游”分支,这样您就可以使用git push
和git pull
,而无需指定显式远程和显式分支。删除分支时,git
将检查上游分支,以查看本地分支是否具有远程上游分支中不存在的提交。您不会通过删除与遥控器相同的分支来丢失任何数据,因为您可以再次检查它。如果删除包含尚未向上游推送的提交的分支,则可能会丢失数据,因此git
会尝试通过警告您删除具有未提交提交的分支来帮助您。
这只是一个警告,因为在很多情况下你不关心某些提交。他们可能是实验失败,合并分支的非重新版本或其他合法情况。