Как принудительно удалить удаленную ветку в GitHub? - PullRequest
15 голосов
/ 06 января 2012

У меня есть 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 ]

19 голосов
/ 06 января 2012

Вы должны сделать:

git remote prune origin

для удаления этой удаленной ветви отслеживания в вашем локальном git-репозитории (prune удаляет любую ветку, которая больше не существует в удаленном источнике). После этого вы не увидите его под git branch -a

8 голосов
/ 06 января 2012

Ветка, которую вы видите - это то, что называется удаленной [отслеживающей] веткой. Он находится в вашем локальном хранилище и представляет собой последнее место, где вы видели эту ветку в удаленном хранилище. Git использует такие ветки, чтобы вам не приходилось общаться с удаленным репозиторием каждый раз, когда вы хотите с ним работать; вы просто обновляете / выбираете один раз, ветка удаленной стойки обновляется, и вы можете работать с этого. В вашем случае ветка в удаленном репозитории давно удалена; вам просто нужно удалить копию в вашем локальном хранилище.

Существует два основных способа его удаления:

  • git branch -d -r origin/pending-issues-in-project удаляет только эту ветку; и
  • git remote prune origin удаляет все такие устаревшие удаленные ветви. Вы также можете обновить одновременно: git remote update --prune origin
0 голосов
/ 18 сентября 2013

прости мой неуклюжий английский.Я надеюсь, что вы могли понять мой ответ.

  1. команда git push origin :pending-issues-in-project, вероятно, неверна.Может быть, вы имели в виду: git push origin pending-issues-in-project.Это толкает ветку в GitHub.

  2. Если ошибка возникает из-за того, что ветвь не существует в репозитории, то почему она появляется в списке удаленных ветвей?Поскольку git - это распределенная система контроля версий, на сервере github есть база данных для хранения репозитория .git и данных, которые вы отправляете в него.Таким образом, если ваша команда use: git branch -de branchName, она просто удаляет локальную ветвь и не вмешивается в .git github и данные, которые у вас есть к ней.любой способ принудительно удалить удаленную ветку?Да, это возможно.команда:

    git push origin --delete <branchName>
    
  3. Если вы хотите узнать больше о функции распространения системы контроля версий git, вы можете найти эту ссылку полезной: функция распространения git ,

    И если вы хотите узнать больше об удалении ветки на github с помощью git, вы можете прочитать об этом здесь .

...