Git: оновлення інформації віддаленої гілки


125

У сховищі git видалена віддалена гілка, яку я не відстежую. Коли я друкую

git branch -r

видалена гілка все ще з’являється (і я можу це перевірити)

Яку команду git мені потрібно запустити, щоб оновити цю інформацію?

Відповіді:


39

Якщо ви виконуєте щось подібне

git branch -d -r remote_name/branch_name

ви видалите лише місцевий замовлення. Ця команда нічого не робить із віддаленим сховищем, тому вона все ще з’являється.

Рішення:

git push origin :branch_name

видалить віддалену гілку (зверніть увагу на ':') та

git branch -d branch_name

видалить ваш місцевий замовлення.

( Довідка )


146
Ви також можете запустити "git віддалене походження чорносливу", щоб очистити віддалені посилання.
cmcginty

3
Це видалить усі гілки, які вже не відслідковуються віддаленим сховищем. Отже, будьте обережні.
Гаррет Гайд

4
Я думаю, що також корисно знати, що, хоч і трохи більш багатослівний, ви можете також використовувати git push <remote> --delete <branchname>для видалення віддалених гілок.
AeroCross

Зазвичай це працює, але я переглядаю ситуацію, коли віддалений список не оновлювався, тому я намагався видалити гілку, яка там не була. Таким чином, спочатку потрібне було рішення @Flo нижче .
dgo

284

Якщо вилучені відділення віддаленого сховища були видалені, і ви хочете одразу оновити всі локальні гілки віддаленого відстеження, ви можете використовувати

$ git remote prune <remotename>

видалити всі застарілі гілки віддаленого відстеження для певного віддаленого (тобто тих, що слідують за гілками, видаленими у віддаленому сховищі)

Дивіться git remoteдокументацію.


Дякую @Casey та @Jakub за відповіді! Як випливає, що інформація про віддалене відділення, що зберігається локально, не оновлюється наступного разу, коли я використовую git fetch?
JJD

4
@JJD: Тому що ви, можливо, базували свою роботу на віддаленій гілці, якої вже немає. Тому зникнення без запиту вважалося поганою ідеєю. Ось чому потрібно чітко обрізати гілки дистанційного відстеження.
Якуб Нарубський

Чи "git gc" також очищає застарілі віддалені гілки?
Джеймс Уолд

@JamesWald: Ні, це не так. git gcпросто запаковує об'єкти і refs, а також видаляє нерозв'язані об'єкти, перебуваючи при цьому (з деяким запасом безпеки).
Якуб Нарбський

186
git remote update --prune

Потрібно оновити всі віддалені гілки, додавши нові та видаливши видалені.

Редагувати: команда віддаленого оновлення в основному отримує список гілок на пульті. Цей --pruneваріант позбудеться локальних гілок віддаленого відстеження, які вказують на гілки, яких більше немає на віддаленому .


Це працювало для мене. Мені потрібно було видалити віддалену гілку, яку з якихось причин не вдалося видалити звичайним походженням git push: <branch_name> '
n0denine

Чи було б точно сказати, що ця відповідь робить те, що робить відповідь Якуба Нарбського та багато іншого? Тобто, він підрізає і отримує оновлення?
Франк Тан

14

Також корисно для перегляду нових віддалених гілок:

git fetch --all

Це мені дуже допомогло. Деякі помилки в Visual studio git заважають показувати нові гілки, створені після клонування. Ця команда допомагає показувати нові гілки
Venkatesh Muniyandi

приємно n простого thx чувак, мати бронзовий знак відповіді на будинок :)
danday74

2

Ви можете комбінувати -rі -dпрапори, щоб видалити віддалені гілки.


чудова порада! однак у цьому випадку є кілька гілок, які вже були видалені, напевно є команда для отримання цих оновлень
Бейн Маркев,

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