Видалену гілку Git видалено, але вона все ще відображається у "гілка -а"


552

Скажімо, у мене було відділення з назвою coolbranchу моєму сховищі.

Тепер я вирішив видалити (віддалено та локально) за допомогою:

git push origin :coolbranch
git branch -D coolbranch

Чудово! Тепер гілка дійсно видалена.

Але коли я біжу

git branch -a

Я все одно отримую:

remotes/origin/coolbranch

Щось слід помітити, це те, що коли я клоную нове сховище, все добре і git branch -aне показує гілку.

Хочу знати - чи є спосіб видалити гілку зі branch -aсписку без клонування нового примірника?



58
Якщо ви git fetch -p(або git pull -p), то віддалені гілки будуть обрізані.
yoyo

Відповіді:


688

git remote prune origin, як запропоновано в іншій відповіді, видалить усі подібні несвіжі гілки. Це, мабуть, те, що ви хочете в більшості випадків, але якщо ви хочете просто видалити цю конкретну гілку віддаленого відстеження, вам слід зробити:

git branch -d -r origin/coolbranch

( -rЛегко забути ...)

-r у цьому випадку буде "Список або видалення (якщо використовується з -d ) гілок віддаленого відстеження." відповідно до документації Git, знайденої тут: https://git-scm.com/docs/git-branch


11
git remote prune originабо будь-яка форма git fetch --pruneпозначення не працювала для мене в моєму випадку. ... Але git branch -d -r origin/feature/branch-nameпрацював. Я не впевнений, чи було це щось пов’язане з тим, що він знаходиться під featureпростором імен (git flow), але так воно знизилося, якщо будь-які googlers виявлять, що з ними трапляється.
Містерпаркер

8
Чи є причина, що це необхідно? Дуже погано залишати ці неіснуючі назви гілок у списку, а не автоматично їх обрізати.
акронім

296

Спробуйте:

git remote prune origin

З віддаленої документації Git :

чорнослив

Видаляє всі застарілі гілки віддаленого відстеження під <name>. Ці несвіжі гілки вже вилучені з віддаленого сховища, на яке посилається <ім'я>, але все ще доступні на локальному рівні в "віддалених / <ім'я>".

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


1
Для повноти картини : вона повинна бути схожа на git pull --pruneзгаданий в stackoverflow.com/a/17983126/94687 А:git remote update --prune
ІМЗ - Іван Zakharyaschev

230

Не забувайте дивовижного

git fetch -p

який бере початок і підрізає все походження.


Для повноти: він повинен бути таким же, як git remote prune originі подібним до git pull --pruneзазначеного на stackoverflow.com/a/6127884/94687 та stackoverflow.com/a/17983126/94687 відповідно. І:git remote update --prune
imz - Іван Захарящев

2
Але гілки все одно будуть видні, якщо ти git branch -a
запустишся

1
@NikhilSahu: Я не бачу віддалених гілок, які було видалено зgit branch -a
user276648

20

У нашому конкретному випадку ми використовуємо Stash як наше віддалене сховище Git. Ми спробували всі попередні відповіді, і нічого не вийшло. Нарешті ми повинні зробити наступне:

git branch –D branch-name (delete from local)
git push origin :branch-name (delete from remote)

Потім, коли користувачі перейшли на зміни, їм потрібно було зробити наступне:

git fetch -p

git branch -d branch-nameпрацював на мене. Зверніть увагу -Dна -d. Насправді, коли я спробував у верхньому регістрі D, -Dвін створив нову гілку з назвою -D
RP-

1
"-D" - це спосіб примусового видалення незалежно від стану натискання чи злиття. Очевидно, будьте обережні, використовуючи його, але у багатьох випадках це було необхідно.
Shadowvail

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