2012-01-07 2 views
109

Это, наверное, немой вопрос, но я новичок в git и вижу удаленную ветку, которая больше не существует.'git branch -av' показывает удаленную ветку, которая больше не существует

$ git branch -a 
* master 
    remotes/origin/master 
    remotes/origin/production 

Я не верю, что производственная отрасль существует удаленно и не может понять, почему она все еще отображается локально. Как удалить или удалить эту ветку? Вот что попытка удалить это выглядит следующим образом:

$ git push origin :production 

error: unable to push to unqualified destination: production 
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 '[email protected]:puppet.git' 

я могу оформить на якобы удаленной производственной отрасли, но получить это:

$ git checkout origin/production 
Note: checking out 'origin/production'. 

You are in 'detached HEAD' state. You can look around, make experimental 
changes and commit them, and you can discard any commits you make in this 
state without impacting any branches by performing another checkout. 

If you want to create a new branch to retain commits you create, you may 
do so (now or later) by using -b with the checkout command again. Example: 

    git checkout -b new_branch_name 

HEAD is now at c323996... added powerdns module, no really 

Я понятия не имею, какого черта я делаю. Любая помощь будет оценена по достоинству.

+0

Какой выход 'git branch -a' после' git fetch'? – alediaferia

+2

все тот же. – CarpeNoctem

+0

Возможный дубликат [Как принудительно удалить удаленную ветку в GitHub?] (Http://stackoverflow.com/questions/8754183/how-to-forcefully-delete-remote-branch-in-github) – Cascabel

ответ

210

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

git remote prune origin 
+4

Спасибо, что сработал! Можете ли вы рассказать о том, что происходит за кулисами? – CarpeNoctem

+7

Это удаленные ветви отслеживания на вашем локальном репо, и вы должны очистить их, если ветви удалены на удаленном репо. – manojlds

+0

вы сделали мой день. –

40

Таким образом, есть две проблемы. В обоих случаях помните, что Git распространяется.

Первый. Когда вы делаете такие вещи, как

$ мерзавца ветви -a

выполняется операция на локальном репо НЕ удаленный компьютер. Другими словами, ваше местное репо сообщает все ветви, о которых известно. Это могут быть локальные ветви (например, «мастер») или удаленные ветви, которые имеют , извлеченные с пульта. Начиная с последней выборки, «производственная» ветвь удаленного репо изменилась, но ваше местное репо не знает этого. Ответ от manojlds, верен. Запуск

$ мерзавец удаленного сливовый происхождения

удалить устаревшие ветви.

Команда «git push origin: production» используется для удаления ветки с ретрансляции git удаленного компьютера. Не ваше местное репо. В этом случае кто-то еще удалил ветку на git repo удаленного компьютера, поэтому вы видите это сообщение об ошибке.

Это link, который суммирует эти команды.

Вторая проблема касается оформления заказа.

При проверке филиала вы хотите сделать это от филиала, а не удаленной ветви. Вот почему вы получаете сообщение об отсоединенной головке. У git-notes repo есть хорошее объяснение проблемы. В основном ключевая фраза:

Однако, когда вы проверяете что-либо, что не является правильным, локальным именем ветки, HEAD больше не является символической ссылкой на что-либо. Вместо этого он фактически содержит хэш SHA-1 (идентификатор фиксации) передаваемого вами коммита.

Теперь, как проверить местную ветку, то же самое, что и удаленная ветка?

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

$ мерзавец контроль -b my_local_branch происхождения/производства

10
git remote prune origin 

прав, просто добавив вы можете использовать --dry-run вариант, который сообщает, что филиалы будут сокращены с локального репозитория, но не делает на самом деле обрезать их

git remote prune origin --dry-run 
Смежные вопросы