Питання Як видалити філію Git як локально, так і віддалено?


Я хочу видалити філію як локально, так і на моєму віддаленому проекту GitHub.

Не вдалося спробувати видалити віддалену гілку

$ git branch -d remotes/origin/bugfix
error: branch 'remotes/origin/bugfix' not found.

$ git branch -d origin/bugfix
error: branch 'origin/bugfix' not found.

$ git branch -rd origin/bugfix
Deleted remote branch origin/bugfix (was 2a14ef7).

$ git push
Everything up-to-date

$ git pull
From github.com:gituser/gitproject
* [new branch] bugfix -> origin/bugfix
Already up-to-date.

Що потрібно зробити, щоб успішно видалити remotes/origin/bugfix філія як локально, так і на GitHub?


13842
2018-01-05 01:12


походження


Примітка модератора: якщо ви маєте намір відповісти на це запитання, зверніть увагу, що вже опубліковано 40 відповідей. Чи буде ваша нова відповідь додати будь-яку істотну цінність? - Robert Harvey♦
Примітка: для Git 2.5+ (Q2 2015) точне повідомлення буде "deleted remote-tracking branch": побачити github.com/git/git/commit/... - VonC


Відповіді:


Короткий зміст

$ git push --delete <remote_name> <branch_name>
$ git branch -d <branch_name>

Зауважте, що в більшості випадків віддалене ім'я є origin.

Видалити місцеву гілку

Щоб видалити місцевий Використовуйте одну з наступних галузей:

$ git branch -d branch_name
$ git branch -D branch_name

Примітка: The -d опція є псевдонімом для --delete, який видаляє лише галузь, якщо вона вже повністю об'єднана у своїй галузі. Ви могли б також використовувати -D, який є псевдонімом для --delete --force, який видаляє галузь "незалежно від об'єднання статусу". [Джерело: man git-branch]

Видалити віддалене відділення [Оновлено 8-Sep-2017]

Щодо Git v1.7.0, ви можете видалити a віддалений використовуючи галузь

$ git push <remote_name> --delete <branch_name>

що може бути легше запам'ятати ніж

$ git push <remote_name> :<branch_name>

який був доданий в Git v1.5.0 "видалити віддалену гілку чи тег".

Починаючи з Git v2.8.0 ви також можете використовувати git push з -d опція як псевдонім для --delete.

Тому версію Gіt, яку ви встановили, визначатимуть, чи потрібно використовувати більш простий або жорсткий синтаксис.

Видалити віддалене відділення [оригінальний відповідь від 5-січня-2010]

З глави 3 з Pro Git Скотт Чакон:

Видалення віддалених філій

Припустімо, що ви закінчили з віддаленим відділом - скажімо, ви та ваші співробітники завершили функцію та об'єднали її в головну гілку вашого віддаленого комп'ютера (або будь-який відділ, в якому є стабільна кодування). Ви можете видалити віддалене відділення за допомогою досить тупого синтаксису git push [remotename] :[branch]. Якщо ви хочете видалити гілку серверного файлу з сервера, ви запускаєте наступне:

$ git push origin :serverfix
To git@github.com:schacon/simplegit.git
 - [deleted]         serverfix

Бум. Немає більше гілок на вашому сервері. Можливо, ви захочете до вуха цієї сторінки, тому що вам потрібна ця команда, і ви, швидше за все, забудете синтаксис. Спосіб запам'ятати цю команду, нагадуючи git push [remotename] [localbranch]:[remotebranch] синтаксис, який ми пройшли трохи раніше. Якщо ви покинете [localbranch] частина, то ти в основному кажеш: "Не беріть нічого на мою сторону і зроби це буде [remotebranch]"

Я видав git push origin :bugfix і це чудово працювало. Скотт Чакон був правий - я хочу собачий вухо що сторінка (або практично собачне вухо, відповідаючи на це на переповненні стеку).

Тоді ви повинні виконати це на інших машинах

git fetch --all --prune

щоб поширювати зміни.


17233
2018-01-05 01:13



Якщо ви знаєте синтаксис git push origin local_branch:remote_branch, потім синтаксис, щоб видалити гілку з git push origin :remote_branch це свого роду мило. Там є порожнеча перед : - Marc-André Lafortune
Не забудьте зробити git fetch --all --prune на інших машинах після видалення віддаленої гілки на сервері. ||| Після видалення місцевої гілки з git branch -d і видалення віддаленої гілки з git push origin --delete інші машини можуть мати "застарілі гілки відстеження" (щоб їх побачити) git branch -a) Щоб позбутися від цього робити git fetch --all --prune. - Trevor Boyd Smith
на додаток до @ TrevorBoydSmith git branch -a щоб переглянути всі гілки, ви також можете використовувати git branch -r для перегляду лише віддалених філій. Дивись також git remote show origin - джерело: gitready.com/intermediate/2009/02/13/list-remote-branches.html - Sandra
Мені довелося бігти git branch -D Branch_Name позбутися місцевої гілки влади - Kolob Canyon
@KolobCanyon Вам потрібно лише використовувати -D, якщо гілка не була об'єднана в іншу гілку. - BTRUE


Відповідь Матвія відмінно підходить для видалення віддалений філії, і я також ціную пояснення, але просте розподіл між двома командами:

Видалити a місцеве відділення з вашої машини:

git branch -d {the_local_branch} (використовуйте -D замість того, щоб примусити видалити філію без перевірки об'єднаного статусу)

Видалити a віддалена філія з сервера:

git push origin --delete {the_remote_branch}

Довідка: https://makandracards.com/makandra/621-git-delete-a-branch-local-or-remote


2872
2018-06-12 14:51



@мегідо добре -D сила видаляє -d дає вам попередження, якщо воно ще не злилося. - TankorSmash
Якщо ваша місцева гілка не зливається з майстром і біжить 'git branch -d your_branch то вам буде помилка, як error: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'. - geeks
Я б запропонував використовувати -d замість -D, оскільки це безпечніше. Якщо -d не вдається через невмілості, то вам потрібно оцінити це, і якщо це, безумовно, OK, щоб видалити, то використовуйте -D. - rooby
Інші мають клони репозиторію, де видалені віддалені відділення git remote prune <name>(наприклад, git remote prune origin), щоб локально видалити застарілі гілки, які більше не існують на пульті. - code_dredd
Якщо ваша гілка у вашій вилці (не завжди походження), використовуйте відповідний репозиторій. наприклад, git push myRepo: mrbranchtodelete - Dhanuka777


Короткі відповіді

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

Видалення віддаленої гілки:

git push origin --delete <branch>  # Git version 1.7.0 or newer
git push origin :<branch>          # Git versions older than 1.7.0

Видалення місцевої гілки:

git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force delete un-merged branches

Видалення місцевої гілки віддаленого відстеження:

git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter

git fetch <remote> --prune # Delete multiple obsolete tracking branches
git fetch <remote> -p      # Shorter

Довгий відповідь: для видалення є 3 різні гілки!

Коли ви маєте справу з видаленням філій як локально, так і віддалено, пам'ятайте про це Є 3 різні філії, що беруть участь:

  1. Місцеве відділення X.
  2. Віддалене походження філія X.
  3. Місцевий відділ віддаленого відстеження origin/X що відстежує віддалену гілку X.

Visualization of 3 branches

Похідний плакат використовується

git branch -rd origin/bugfix

який тільки видалив його місцевий відділ дистанційного відстеження  origin/bugfix, а не фактична віддалена гілка bugfix на origin.

Diagram 2

Видалити цю справжню віддалену гілку, тобі потрібно

git push origin --delete bugfix

Diagram 3

Додаткова інформація

У наступних розділах описуються додаткові подробиці, які слід враховувати при видаленні віддаленого та віддаленого відстеження.

Натискання для видалення віддалених філій також видаляє гілки віддаленого відстеження

Зауважте, що видалення віддаленої гілки X з командного рядка за допомогою a git push  також видаляє місцеву гілку віддаленого відстеження  origin/X, тому не потрібно обрізати застарілу гілку з віддаленим відстеженням git fetch --prune або git fetch -p, хоча це не зашкодить, якщо ви все-таки зробили це.

Ви можете перевірити, чи є філія віддаленого відстеження origin/X також було видалено, виконавши таке:

# View just remote-tracking branches
git branch --remotes
git branch -r

# View both strictly local as well as remote-tracking branches
git branch --all
git branch -a

Обрізка застарілого місцевого джерела віддаленого відстеження / X

Якщо ви не видаляли віддалену гілку X з командного рядка (як наведено вище), то у вашому місцевому репо все ще буде (відтепер застаріле) віддалене відстеження гілки origin/X. Це може статися, якщо ви видалили віддалене підключення безпосередньо через веб-інтерфейс GitHub, наприклад.

Типовий спосіб видалення цих застарілих гілок віддаленого відстеження (оскільки Git версії 1.6.6) просто запускати git fetch з --prune або коротше -p. Зауважте, що це призведе до видалення всіх застарілої локальної гілки віддаленого відстеження для будь-яких віддалених галузей, які більше не існують на пульті дистанційного керування:

git fetch origin --prune
git fetch origin -p # Shorter

Ось відповідна цитата з 1.6.6 примітки до випуску (наголос мій):

"git get" дізнався  --all і --multipleпараметри, щоб запустити завантаження з   багато сховищ, і --prune можливість видалення дистанційного відстеження   відгалужені гілки  Це створює "дистанційне оновлення git" та "git"   віддалена чорна "менш необхідна (немає плану видалення" віддаленого "   оновлення "або" віддалена чорнослива ", хоча).

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

Крім того, замість того, щоб обрізати ваші застарілі місцеві відділи віддаленого відстеження через git fetch -p, ви можете уникнути додаткової роботи мережі просто вручну видалити гілки (ів) з --remote або -r прапори:

git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter

Дивись також


1641
2018-05-30 18:32



З вашої ілюстрації я бачу там локальний клон репо та віддалений початковий репо. Отже, є щонайменше дві фізичні гілки. Де третя гілка видалити? Чи є третя гілка лише покажчиком, що вказує на фіксацію у місцевому клоні репо? - huggie
@ huggie це дуже правильно. Філії в Git - це просто закладки, що додаються до зобов'язань. Отже, у моїх графіках вище, є X і origin/X закладки в локальному клоні (2 філії), а потім є X на пульті дистанційного керування (3 філії).
+1 для віддаленої гілки відстеження. Це гілка, що викликає проблеми при клонування чужої гілки. Він продовжує стежити за вашими домовленостями та запитує вас, чи хочете ви натиснути на цю галузь. - Kermit_ice_tea


Кроки видалення гілки:

для видалення віддалена філія:

git push origin --delete <your_branch> 

для видалення місцеве відділення, у вас є три способи:

1: git branch -D <branch_name> 

2: git branch --delete --force <branch_name>  //same as -D

3: git branch --delete  <branch_name>         //error on unmerge

Поясніть: Добре, просто поясніть, що відбувається тут!

Просто робіть git push origin --delete до видаліть свій віддалений підрозділ ТІЛЬКИ, додайте назву гілки в кінці, і це буде видалено і натиснемо його на пульті одночасно ...

Крім того, git branch -D, який просто видаляє місцеву гілку ТІЛЬКИ! ...

-D виступає за --delete --force який видаляє гілку, навіть не об'єднаний (force delete), але ви також можете використовувати -d що означає --delete які викидають помилку відповідно до статусу злиття галузі ...

Я також створюю зображення нижче, щоб показати кроки:

delete a remote and local branch in git


927
2018-06-27 13:13



git branch -a буде відображати місцеві та віддалені галузі. Це допоможе вам ввести схему. - LoranceChen
Зверніть увагу, що якщо ви встановлюєте філію, яку ви хочете видалити, перед видаленням місцевої гілки необхідно замовити гілку, відмінну від того, що потрібно видалити (наприклад, master). - BaDr Amer
[від теми] як ви створили наведене вище дивовижне зображення? - Lucas Caton


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

git push --delete origin serverfix

Що робить так само, як і

git push origin :serverfix

але це може бути легше запам'ятати.


703
2017-10-27 22:22



... і безпечніше використовувати: O - cst1992
Ви забули частину видалення місцевої гілки, яку можна виконати: git branch -d <local_branch> або git branch -D <local_branch> для видалення сили - Amit Dash


Якщо ви хочете видалити гілку, спочатку перевірте філію, яка відрізняється від галузі, яку потрібно видалити.

git checkout other_than_branch_to_be_deleted

Видалення місцевої гілки:

git branch -D branch_to_be_deleted

Видалення віддаленої гілки:

git push origin --delete branch_to_be_deleted

344
2017-10-07 13:52





Порада. Коли ви видаляєте філії за допомогою

git branch -d <branchname>    # deletes local branch

або

git push origin :<branchname> # deletes remote branch

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

Щоб вирішити це, члени вашої команди можуть обрізати віддалені гілки за допомогою

git remote prune <repository>

Це звичайно git remote prune origin.


329
2017-11-07 13:02



Ви повинні прояснити це вище git push операція видаляє місцеву гілку і віддалена гілка. - Annika Backstrom
Зауважте, що git remote prune це дещо застарілий спосіб видалення застарілих гілок віддаленого відстеження, чим новий спосіб це зробити - це використовувати git fetch --prune або git fetch -p.
@RRMadhav, дійсно ви не побачите віддалену гілку після видалення, оскільки посилання на віддалену гілку буде видалено для вас на місці. Будь-хто інший у вашій команді, який перевірив цю філію, як і раніше матиме таку посилання, і все одно побачить її, якщо не обрізати гілку. - pfrenssen


git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>

247
2017-10-24 17:36



Зауважте, що -D  сили видалення Це завжди краще використовувати -d, який буде нагадувати, якщо вам потрібно зробити щось небезпечне. - Jonathon Reinhart
ахахаха :) це залежить від вас: використовуйте -d, якщо ви хочете побачити плач чи плаття, або -D, якщо ви хочете плакати. - Felipe