如何在GitHub中强制删除远程分支?

时间:2012-01-06 06:22:12

标签: git github git-branch remote-branch

我有2个远程分支:

 - pending-issues-in-project
 - new-issues-in-project

我试图像这样删除pending-issues-in-project
git push origin :pending-issues-in-project,但我收到了错误:

error: unable to push to unqualified destination: pending-issues-in-project
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.  
error: failed to push some refs to 'git@github.com:forkedRepo/RepoName.git'

所以我想我可能已经删除了pending-issues-in-project分支,但是当我运行时 git branch -a它在列表中显示pending-issues-in-project分支 当我为new-issues-in-project尝试相同(尝试删除)时,它起作用了。
我已使用git branch -D branchName从本地服务器删除了两个分支。

  

如果错误发生,因为存储库中不存在分支   为什么它进入远程分支列表?
  和
  有没有办法强制删除远程分支?

感谢您的时间。

3 个答案:

答案 0 :(得分:19)

你必须这样做:

git remote prune origin

删除本地git存储库中的远程跟踪分支(prune将删除远程源中不存在的任何分支)。之后,您将无法在git branch -a

下看到它

答案 1 :(得分:8)

您所看到的分支就是所谓的远程[跟踪]分支。它位于本地存储库中,它代表您在远程存储库中看到该分支的最后一个位置。 Git使用这样的分支,这样你就不必每次想要处理远程存储库;您只需更新/获取一次,远程货架分支就会更新,您可以从中进行操作。在您的情况下,远程存储库中的分支很久就被删除了;您只需要删除本地存储库中的副本。

有两种主要方法可以删除它:

  • git branch -d -r origin/pending-issues-in-project只删除该分支;和
  • git remote prune origin删除所有此类陈旧的远程分支。您也可以同时更新:git remote update --prune origin

答案 2 :(得分:0)

原谅我笨拙的英语。我希望你能理解我的答案。

  1. 命令git push origin :pending-issues-in-project可能是错误的。也许你的意思是:git push origin pending-issues-in-project。它将分支推送到github。

  2. 如果错误即将发生,因为存储库中不存在分支,那么为什么它会进入远程分支列表? 由于git是一个分布式版本控制系统,github的服务器有一个数据库来存储.git repo和你推送给它的数据。因此,如果您使用命令:git branch -de branchName,它只会删除本地分支,并且不会干扰github的.git以及您推送给它的数据。

  3. 有没有办法强制删除远程分支? 对的,这是可能的。命令是:

    git push origin --delete <branchName>
    
  4. 如果您想了解有关git版本控制系统的分发功能的更多信息,您可能会发现此链接很有用:git's distributed feature

    如果您想了解更多关于通过git删除github上的分支的信息,您可以阅读here