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

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

$ 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

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

Ответ 1

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

git remote prune origin

Ответ 2

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

Во-первых. Когда вы делаете что-то вроде

$Git branch -a

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

$Git удаленный источник черноты

для удаления устаревших ветвей.

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

Вот ссылка , в которой суммируются эти команды.

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

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

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

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

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

$Git checkout -b my_local_branch origin/production

Ответ 3

git remote prune origin

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

git remote prune origin --dry-run