如何使用Git删除远程分支?

33

我知道这个问题以前已经有人问过,但是我尝试了以下方法却似乎无法删除远程分支。

aly@neon:~/workspace/3DOD_VARIANCE$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/multi_gauss_at_nodes
  remotes/origin/old-state-with-mean-deviation-from-centre
  remotes/origin/variance-branch


aly@neon:~/workspace/3DOD_VARIANCE$ git branch -r -d origin/old-state-with-mean-deviation-from-centre Deleted remote branch origin/old-state-with-mean-deviation-from-centre (was 0ed90b2).


Fetching origin
From https://bitbucket.org/alykhantejani/3dobjectdetection
 * [new branch]      old-state-with-mean-deviation-from-centre -> origin/old-state-with-mean-deviation-from-centre

你可以看到分支已经被再次获取了。有任何想法我做错了什么吗?

另外,顺带一提,有没有办法在删除之前检查这个分支是否已经合并回master?


1
可能是重复的问题:如何在本地和GitHub中删除Git分支? - Livius
@Livius 你好,是的,我先参考了这个问题,但没有成功。 - Aly
“没有运气”并不是一个有用的错误报告。另外,为什么你的问题没有说明你尝试了那里给出的解决方案? - Chronial
@Chronial,在这种情况下,“没有运气”在问题中有很好的记录,因为我提供了完整的命令行历史记录... - Aly
链接的答案解释了如何使用 git push。我在你的问题中没有看到一个 git push。我有什么遗漏吗? - Chronial
4个回答

53

要删除远程分支,请运行以下命令:

git push origin :branch-to-delete

诀窍在于冒号


有没有想法可以在删除之前检查这个分支是否已经合并到主分支? - Aly
git branch --contains that-branch。它会给你一个包含该分支的分支列表,如果你的分支在列表中,你可以删除它。 - n1_
尝试了上述命令并获得以下信息:无法推送到不合格的目标:origin/old-state-with-mean-deviation-from-centre。目标refspec既不匹配远程上的现有引用,也不以refs/开头。 - Aly
似乎服务器上不存在该分支了。您应该更新本地分支列表。请参见:https://dev59.com/rnA75IYBdhLWcg3wo6vx运行以下命令:git remote prune origin - n1_
找到了解决方案,我之前输入了 :origin/old-state... 其中 origin 不是必需的。 - Aly

38

完整的推送命令如下

git push <remote name> <local branch>:<remote branch>

只需将“no branch at all”发送到远程服务器即可:

git push origin :old-state-with-mean-deviation-from-centre

关于旁注:当您使用“git branch -d”时,git会防止您删除尚未合并的分支(并告诉您如果确实想要删除它,请使用-D)。

此外,请注意git branch -d -r <branch name>将在您的.git文件夹中删除引用(而不是位于远程服务器上的真实分支),这就是为什么新的获取操作会重新创建它的原因。


谢谢,问题已经解决。请你能强调一下,远程分支名称中不需要加入原始/限定符,因为这会导致执行失败。 - Aly
2
所有可以使用“branch”命令的操作都会影响到你的本地存储库,即.git文件夹。git branch -d -r origin/master会删除.git /refs/remotes/origin/master文件(其中包含一个sha1),但并不会删除服务器上的文件(因为没有分支被命名为“origin/master”,该名称只是一部分)。如果你键入git push :origin/old-branch,它将尝试移除不存在的名称为“origin/old-branch”的分支(以origin作为命名空间)。 - Asenar
现在有一个 --delete 参数。请参见我的回答 - Jérôme

13

7
尝试
git push origin :remote_branch_to_be_deleted

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接