'git branch -av', показуючи віддалену гілку, якої більше немає


168

Це, мабуть, німе питання, але я абсолютно новий, коли я можу бачити, і я бачу віддалену гілку, якої вже немає.

$ 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 'git@IP: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

У мене немає поняття, що, до біса, я роблю. Будь-яка допомога буде вдячна.


який вихід git branch -aпісля a git fetch?
аледіаферія


У запропонованому мною дублікаті є відповідь, яка пояснює набагато більше, ніж тут зробили manojlds.
Каскабель

Відповіді:


338

Ви повинні зробити:

git remote prune origin

8
Дякую, що спрацювало! Чи можете ви детальніше розповісти, що відбувається за лаштунками?
CarpeNoctem

12
Це гілки дистанційного відстеження на вашому локальному репо, і ви повинні їх очистити, якщо гілки видалено на віддаленому репо.
manojlds

2
Рідко я так швидко знаходжу та реалізую таке прямолінійне запитання та відповідь.
jleach

Superb one.In мого місцевий я бачив дивні гілки , які не мали ніякого зв'язку з кодовою базою репо .when я запустив цю команду, він налаштований мій місцевий філіал походження , а потім я додав видобувний майстер .thanks
Ankur Srivastava

54

Тож є дві проблеми. В обох випадках пам’ятайте, що Git поширюється.

Перший. Коли ти робиш такі речі

$ git гілка -а

операція виконується на локальному РЕПО НЕ віддаленому комп’ютері. Іншими словами, ваше місцеве репортаж звітує про всі галузі, про які відомо. Це можуть бути місцеві відділення (як «майстер») або віддалені гілки , що вона має вуха від пульта дистанційного керування. З часу останнього виходу відділення "виробництва" віддаленого репо змінилося, але ваше місцеве репо не знає цього. Відповідь manojlds правильна. Біжи

$ git віддалене походження чорносливу

видалити несвіжі гілки.

Команда 'git push origin: production' використовується для видалення гілки з gpo repo віддаленого комп'ютера. Не ваше місцеве репо. У цьому випадку хтось інший вже видалив гілку на git repo віддаленого комп'ютера, тож ви побачите це повідомлення про помилку.

Ось посилання, що узагальнює ці команди.

Друга проблема стосується оформлення замовлення.

Перевіряючи відділення, ви хочете зробити це з місцевої гілки, а не з віддаленої гілки. Ось чому ви отримуєте помилку про відокремлену ГОЛОВУ. У GIT-примітка репо має гарне пояснення проблеми в закривавлених деталях. В основному ключова фраза є

Однак, коли ви перевіряєте що-небудь, що не є власною, локальною назвою філії, HEAD вже не є символічним посиланням на що-небудь. Натомість він фактично містить хеш SHA-1 (ідентифікатор фіксації) комісії, на який ви переходите.

Тепер, як перевірити місцеве відділення, тобто те саме, що віддалене відділення?

Легко, ви створюєте локальну філію під час оформлення віддаленого відділення каси.

$ git check -b походження / виробництво my_local_branch


20
git remote prune origin

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

git remote prune origin --dry-run
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.