Як видалити гілку Git локально та віддалено?


16949

Я хочу видалити гілку як локально, так і віддалено.

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

$ 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гілку як локально, так і віддалено?


1056
Примітка модератора: Якщо ви збираєтесь відповісти на це питання, зауважте, що вже розміщено 40 відповідей. Чи додасть ваша нова відповідь якусь істотну цінність?
Роберт Харві

54
Примітка: для Git 2.5+ (Q2 2015) точне повідомлення буде " deleted remote-tracking branch": див. Github.com/git/git/commit/…
VonC

Вас може зацікавити цей скрипт, який спрощує різницю між видаленням локальної гілки І віддаленою: tlbx.app/blog/delete-any-git-branch-the-easy-way
Міг,

@RobertHarvey тільки 39 зараз
Адам

@Adam: 81. 42 відповіді було видалено з різних причин. Незрозуміла одержимість громадськості певною темою - одна з найбільших загадок життя.
Роберт Харві

Відповіді:


21425

Резюме

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

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

$ git push -d origin <branch_name>

Видалити місцеве відділення

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

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

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

Видалити віддалену гілку [Оновлено 8 вересня 2017 року]

Станом на Git v1.7.0 , ви можете видалити віддалену гілку за допомогою

$ 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.

Тому встановлена ​​вами версія Git визначатиме, чи потрібно використовувати простіший чи складніший синтаксис.

Видалити віддалену гілку [Оригінальний відповідь від 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і це прекрасно працювало. Скотт Чейкон мав рацію - я захотів би почути цю сторінку (або практично собаче вухо, відповідаючи на це на стек переповнення).

Потім слід виконати це на інших машинах

# Fetch changes from all remotes and locally delete 
# remote deleted branches/tags etc
# --prune will do the job :-;
git fetch --all --prune

для поширення змін.


353
Не забудьте зробити це git fetch --all --pruneна інших машинах після видалення віддаленої гілки на сервері. ||| Після видалення локальної гілки git branch -dта видалення віддаленої гілки з git push origin --deleteіншими машинами все ще можуть бути "застарілі гілки відстеження" (щоб їх побачити git branch -a). Щоб позбутися цього, робіть git fetch --all --prune.
Тревор Бойд Сміт

14
окрім @ TrevorBoydSmith's git branch -aдля перегляду всіх гілок, ви також можете використовувати лише git branch -rдля перегляду віддалених гілок. дивіться також git remote show origin- джерело: gitready.com/intermediate/2009/02/13/list-remote-branches.html
Сандра

17
Мені довелося бігти, git branch -D Branch_Nameщоб позбутися місцевого відділення
Колобський каньйон

11
@KolobCanyon Ви повинні використовувати -D, лише якщо гілка не була об'єднана в іншу гілку.
БТРЮ

3
Питання було "Що мені потрібно зробити по-різному, щоб успішно видалити гілку віддалених / походження / помилок як локально, так і на GitHub?" Після запуску команд у оновленій відповіді локальна гілка все ще присутня. Було б добре, якби прийнята відповідь була повною відповіддю. Це абсолютно дивовижно, як важко Git робить прості завдання ...
jww

3316

Відповідь Метью відмінно підходить для видалення віддалених гілок, і я також вдячний за пояснення, але для того, щоб зробити просту відмінність між двома командами:

Щоб видалити локальну гілку з машини:

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

Щоб видалити віддалену гілку з сервера:

git push origin --delete {the_remote_branch}

Довідка: Git: видалення гілки (локальної чи віддаленої)


250
@megido добре -Dсила видаляє, -dпопереджає, якщо вона вже не об'єднана.
TankorSmash

8
Якщо ваша місцева філія не з’єднається з господарем і побігла, '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'.
вунди,

12
Я б запропонував використовувати -d замість -D, оскільки це безпечніше. Якщо -d виходить з ладу через незареєстровані зобов’язання, то вам потрібно оцінити це, і якщо це точно добре, щоб видалити, тоді використовуйте -D.
rooby

7
Інші з клонами сховищ, де віддалені гілки були видалені, повинні працювати git remote prune <name>(наприклад git remote prune origin), щоб локально видалити несвіжі гілки, яких більше немає у віддаленому.
code_dredd

3
Я хотів би додати, що -d подає попередження, якщо воно не об'єднане з поточною HEAD. Якщо вам потрібна чіткість, я рекомендую цю команду. У git branch -a --merged origin/masterній будуть перераховані всі гілки, як локальні, так і віддалені; які були об'єднані в майстра. Додаткова інформація тут
Ерік

2041

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

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

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

git push origin --delete <branch>  # Git version 1.7.0 or newer
git push origin -d <branch>        # Shorter version (Git 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 remote-tracking branches
git fetch <remote> -p      # Shorter

Довгий відповідь : є три різні гілки , щоб видалити!

Якщо ви маєте справу зі видаленням гілок як локально, так і віддалено, майте на увазі, що тут задіяні три різні гілки :

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

Візуалізація трьох гілок

Використовується оригінальний плакат:

git branch -rd origin/bugfix

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

Діаграма 2

Щоб видалити цю фактичну віддалену гілку , вам потрібно

git push origin --delete bugfix

Діаграма 3

Додаткові деталі

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

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

Зауважте, що видалення віддаленої гілки Xз командного рядка за допомогою а 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 fetch" дізнався --all і --multipleпараметри, запустити завантаження з багатьох сховищ та --pruneможливість видалити гілки віддаленого відстеження, які застаріли. Вони роблять "віддалене оновлення git" та "git remote prune" менш необхідним (хоча планувати видалення "віддаленого оновлення" та "віддаленого чорносливу" немає).

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

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

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

Дивись також


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

6
@huggie, це майже правильно. Гілки в Git - це лише закладки, додані до комітетів. Отже, у моїх графіках, наведених вище, є Xі origin/Xзакладки в локальному клоні (2 гілки), а потім є Xна віддаленому (роблячи 3 гілки).

6
+1 для відділення віддаленого відстеження. Ця гілка викликає проблеми, коли ви клонуєте чужу гілку. Він продовжує відстежувати ваші зобов’язання та запитувати, чи хочете ви просуватися до відділення цієї людини.
Kermit_ice_tea

1
Графіка лише золота молодець.
Mogens TrasherDK

1
Заради майбутніх читачів: Що вище говорить @Kermit_ice_tea - це локальна гілка (як описано у цій відповіді), а не гілка дистанційного відстеження . Коли в локальній гілці налаштована "гілка за течією", вона за замовчуванням витягнеться з неї та перейде до цієї віддаленої гілки. Місцеве відділення , яке має «вгору по течії гілки» , встановленої на ньому називається «відстеження галузі» , тому його легко сплутати з дистанційним відстежують галузями з - за подібну термінологію.
Девід П

1520

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

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

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 яких буде видалено гілку, навіть якщо вона не об'єднана (примусово видалити), але ви також можете скористатися, -dякі стоять, для --deleteяких кидають помилку, відповідні статусу злиття гілки ...

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

Видаліть віддалену та локальну гілку в git


49
git branch -aвідображатиме місцеві та віддалені відділення. Це допоможе вам ввести схему.
LoranceChen

4
зауважте, що якщо ви встановлюєте гілку, яку потрібно видалити, перед тим, як видалити локальну гілку, вам потрібно оформити іншу гілку, ніж ту, яку потрібно видалити (наприклад: master).
Бадр Амер

Коли гілки видаляються за походженням, ваш місцевий сховище не пам’ятатиме про це. Ви все одно будете мати локально кешовані версії цих гілок (що насправді добре), але гілка git -a все ще буде перелічувати їх як віддалені гілки. Ви можете очистити цю інформацію локально так: git remote prune originВаші локальні копії видалених гілок цим не видаляються. git fetch --prune
Такого

2
Зображення відволікає і дуже велике і нічого не додає у відповідь. Я сподіваюсь, що це не стає трендом щодо SO.
jmiserez

797

Для видалення віддаленої гілки ви також можете скористатися наступним

git push --delete origin serverfix

Що робить те саме, що і

git push origin :serverfix

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


1
... і безпечніше використовувати: O
cst1992

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

370

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

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.


14
Вам слід уточнити, що вищевказана git pushоперація видаляє локальну гілку та віддалену гілку.
Annika Backstrom

22
Зауважте, що git remote pruneце дещо застарілий спосіб видалення застарілих гілок віддаленого відстеження, новіший спосіб - це використовувати git fetch --pruneабо git fetch -p.

1
@RRMadhav, дійсно ви не побачите видалену гілку після її видалення, оскільки посилання на віддалену гілку буде видалено для вас локально. Хто-небудь інший у вашій команді, який перевірив цю гілку, все ще матиме це посилання і все одно буде бачити її, якщо вони не обрізають гілку.
pfrenssen

361

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

git checkout other_than_branch_to_be_deleted

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

git branch -D branch_to_be_deleted

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

git push origin --delete branch_to_be_deleted

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

7
Зауважте, що -D примушує видалення. Це завжди краще використовувати -d, що буде нагадувати, якщо вам потрібно зробити щось небезпечне.
Джонатан Райнхарт

13
ахаха :) це залежить від вас: використовуйте -d, якщо ви хочете бачити, як плаче git, або -D, якщо ви хочете плакати.
Феліпе

224

Це просто: Просто запустіть таку команду:

Щоб видалити гілку Git як локально, так і віддалено, спочатку видаліть локальну гілку за допомогою цієї команди:

git branch -d example

(Ось exampleназва філії.)

Після цього видаліть віддалену гілку за допомогою цієї команди:

git push origin :example

199

Ще один підхід:

git push --prune origin

УВАГА: Це видалить усі віддалені гілки, які не існують локально. Або більш всебічно,

git push --mirror

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


1
git push - походження походження не зробило нічого для мене на gitlab: git clone git: //repo.git; git гілка -d -r походження / деякі-гілки; git push - грубого походження; врожайність: все сучасне; git fetch; повертає локально видалені гілки назад; git push - дзеркало; тепер вони справді пішли!
eMBee

165

У своїх налаштуваннях Bash я використовую наступне :

alias git-shoot="git push origin --delete"

Тоді ви можете зателефонувати:

git-shoot branchname

11
Я в кінцевому підсумку просто додати псевдонім "стріляти" у мій .gitconfig shoot = push origin --delete
hdost

Якщо ваше походження є Atlassian Stash і гілка встановлена ​​за замовчуванням, ви отримаєте помилку "За замовчуванням видалення поточної гілки заборонено ...". Мені довелося змінити гілку за замовчуванням в Stash, щоб вказати на іншу гілку, перш ніж я можу видалити.
неописатись

Це абсолютно просто, як ви це робили, але fyi git також дозволяє робити власні команди. Помістіть git push origin --delete $1файл на шляху, який називається, git-shootі git shoot branchnameвін теж працюватиме.
mahemoff

132

Видалити локально:

Щоб видалити локальну гілку, ви можете використовувати:

git branch -d <branch_name>

Щоб примусово видалити гілку, використовуйте -Dзамість -d.

git branch -D <branch_name>

Видалити віддалено:

Є два варіанти:

git push origin :branchname

git push origin --delete branchname

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


129

З січня 2013 року в GitHub включено: Delete branch кнопку біля кожної гілки на вашій сторінці "Відділення".

Відповідна публікація в блозі: Створення та видалення гілок


3
Я почав використовувати Github лише цього року, тому мені було цікаво, чому це таке високо оцінене питання, і чому жоден із найкращих відповідей не пропонував просто видалити його з веб-інтерфейсу Github! Цікаво, що це лише нещодавнє доповнення.
Cam Jackson

6
Я збирався вказати на це. Зверніть увагу , що лампочка кнопки не буде видаляти місцеве відділення ... подивитися відповідь про те , як зробити це: stackoverflow.com/a/10999165/901641
ArtOfWarfare

126

Якщо ви хочете виконати обидва ці дії за допомогою однієї команди, ви можете зробити псевдонім для цього, додавши нижче до свого ~/.gitconfig:

[alias]
    rmbranch = "!f(){ git branch -d ${1} && git push origin --delete ${1}; };f"

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

git config --global alias.rmbranch \
'!f(){ git branch -d ${1} && git push origin --delete ${1}; };f'

ПРИМІТКА . У разі використання -d(малого г) гілка буде видалена лише у випадку, якщо вона була об'єднана. Щоб змусити видалення відбутися, вам потрібно буде скористатися -D(великим регістром D).


6
Це те, що я шукав. Мій власний псевдонім функції оболонки не працював (Несподіваний EOF), і я не міг зрозуміти чому, але це чудово працює! Єдина зміна, яку я вніс, - це заміна &&на ;те, що навіть якщо перша команда не вдасться, друга все одно буде виконуватися (іноді існує лише локальна або лише віддалена).
користувач1021726

115

Щоб видалити свою філію локально та віддалено

  • Оформити замовлення на головну галузь - git checkout master

  • Видаліть віддалену гілку - git push origin --delete <branch-name>

  • Видаліть локальну філію - git branch --delete <branch-name>


112

Ви також можете це зробити, використовуючи git remote prune origin

$ git remote prune origin
Pruning origin
URL: git@example.com/yourrepo.git
 * [pruned] origin/some-branchs

Він обрізає та видаляє гілки віддаленого відстеження із git branch -rсписку.


108

Крім інших відповідей, я часто використовую інструмент git_remote_branch . Це додаткова установка, але це дає вам зручний спосіб взаємодії з віддаленими відділеннями. У цьому випадку видалити:

grb delete branch

Я вважаю, що я також досить часто використовую команди publishта trackкоманди.


98

Команда з одним лайнером для видалення локального та віддаленого :

D=branch-name; git branch -D $D; git push origin :$D

Або додайте псевдонім нижче до своєї ~ / .gitconfig . Використання:git kill branch-name

[alias]
    kill = "!f(){ git branch -D \"$1\";  git push origin --delete \"$1\"; };f"

17
Carefully Використовуйте git branch -Dобережно в сценарії, оскільки він примусово видаляє гілку, не перевіряючи, чи вона була об'єднана. Використовуйте -dдля безпеки.
цезарсол

94

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

Припустимо, наша робота з галузевої "контактної форми" зроблена, і ми вже інтегрували її в "майстер". Оскільки він нам більше не потрібен, ми можемо видалити його (локально):

$ git branch -d contact-form

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

git push origin --delete contact-form

87

Видалити віддалену гілку

git push origin :<branchname>

Видалити місцеве відділення

git branch -D <branchname>

Видалення кроків локальної філії:

  1. виїзд в інше відділення
  2. видалити місцеву гілку

3
Чи потрібне видалення віддаленої гілки після цього "git push"?
Саміта Чатуранга

@SamithaChathuranga ні, git push origin :<branchname>вже натискає «пусту» гілку на віддалений (значить, видаляє віддалену гілку)
Michał Szajbe

86

Просто скажіть:

git branch -d <branch-name>
git push origin :<branch-name>

Це працює, якщо є власна філія. Але якщо ви будете обрізати всі непотрібні гілки в репо (деякі з них не є вашими), цього буде недостатньо
Kermit_ice_tea

83
git push origin --delete <branch Name>

легше запам’ятати, ніж

git push origin :branchName

81

Тепер це можна зробити за допомогою програми GitHub Desktop .

Після запуску програми

  1. Клацніть на проект, що містить філію
  2. Перейдіть до гілки, яку ви хочете видалити

    Перемикання гілки

  3. У меню "Відділення" виберіть "Скасувати публікацію ...", щоб гілка була видалена з серверів GitHub.

    Скасувати публікацію відділення

  4. У меню "Відділення" виберіть "Видалити" ім'я гілки "...", щоб відділення було видалено з вашої локальної машини (AKA машина, на якій ви зараз працюєте)

    Видалити місцеве відділення


15
Я не став голосом, але я думаю, що це суттєво не допомагає. Очевидно, що питання вимагає більш відповіді типу командного рядка без використання зовнішньої програми, якщо люди натиснули сюди, вони, ймовірно, не шукатимуть github для настільних шляхів.
Daemedeor

12
@Daemedeor, я не згоден. У 2010 році, коли ОП задало це питання, способу виконання інтерфейсу користувача це не існувало, і єдиним варіантом був командний рядок. Щоб вказати, що ви хочете лише параметр командного рядка, це слід вказати у запитанні або з тегом командного рядка-інтерфейсу , якого в цьому випадку немає.
Ерік

3
Команда git для видалення віддаленої гілки засихає, і я, як правило, її забуваю (як нову, так і стару). На щастя, є інструменти GUI, які мають можливість. Git Gui, TortoiseGit і GitHub Desktop мають її - я б хотів, щоб у Git Extensions був також такий функціонал. У будь-якому випадку, що я пам’ятаю - це запустити Git Gui з Git Extensions, коли мені потрібно видалити віддалену гілку.
везенков

78

Видалити локально - (нормально)

git branch -d my_branch

Якщо ваша філія перебуває у відновленні / злитті, і це було зроблено належним чином, це означає, що ви отримаєте помилку, Rebase/Merge in progress , тож у такому випадку ви не зможете видалити свою гілку.

Отже, або вам потрібно вирішити перезавантаження / злиття. В іншому випадку ви можете примусово видалити , використовуючи,

git branch -D my_branch

Щоб видалити у віддаленому режимі :

git push --delete origin my_branch

Ви можете зробити те ж саме, використовуючи:

git push origin :my_branch   # Easy to remember both will do the same.

Графічне зображення:

Введіть тут опис зображення


77

Це дуже просто:

Щоб видалити віддалену гілку

git push -d origin <branch-name>

Або

git push origin :<branch-name>

Щоб видалити місцеву гілку

git branch -D <branch-name>

2
Мені потрібно було --deleteзамість -dвидалити віддалену гілку.
ZakJ

-dОпція є псевдонімом для, --deleteі якщо --deleteробота тоді -dповинна працювати, якщо ви змушені хочете видалити гілку, яку ви можете використовувати -Dзамість -dабо --delete.
Вівек Мару

68

Це не працюватиме, якщо на пульті дистанційного керування є тег із такою ж назвою, що і гілка:

$ git push origin :branch-or-tag-name
error: dst refspec branch-or-tag-name matches more than one.
error: failed to push some refs to 'git@github.com:SomeName/some-repo.git'

У цьому випадку вам потрібно вказати, що ви хочете видалити гілку, а не тег:

git push origin :refs/heads/branch-or-tag-name

Аналогічно, для видалення тегу замість гілки ви б використовували:

git push origin :refs/tags/branch-or-tag-name

1
Це добре, але люди справді не повинні називати свої гілки та теги з тим самим іменем та такою ж схемою іменування.

3
Ну, мій сценарій полягав у тому, що я перетворював гілку в тег, і тег має сенс мати те саме ім'я, що і гілка. Під перетворенням я маю на увазі об'єднання гілки B в A і позначення останнього комітету у гілці B тегом B, так що після видалення гілки B її все одно можна легко відновити, просто перевіривши тег B.
Грег,

53

Багато інших відповідей призведе до помилок / попереджень. Такий підхід є відносно дурним доказом, хоча, можливо, все ще знадобиться, git branch -D branch_to_deleteякщо, наприклад, він не повністю об'єднаний some_other_branch.

git checkout some_other_branch
git push origin :branch_to_delete
git branch -d branch_to_delete

Віддалена обрізка не потрібна, якщо ви видалили віддалену гілку. Він використовується лише для отримання найновіших видалень, доступних у сховищі, яке ви відстежуєте. Я помічав git fetch, що додаватимуть віддалені, а не видаляти їх. Ось приклад того, коли git remote prune originнасправді щось робити:

Користувач A виконує описані вище дії. Користувач B виконає такі команди, щоб побачити найновіші віддалені гілки:

git fetch
git remote prune origin
git branch -r

51

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

Я додав у свій профіль Bash таке:

function gitdelete(){
    git push origin --delete $1
    git branch -D $1
}

Потім кожен раз, коли я закінчую з гілкою (зливається master, наприклад), у своєму терміналі я запускаю наступне:

gitdelete my-branch-name

... які потім видаляються my-branch-nameз originтак і на місцевому рівні.


7
розширення на цьому, --delete "$@"і -D "$@"замість цього $1буде обробляти його для декількох гілок.
kunl

3
Я пропоную запустити git branch -dспочатку (з малих букв 'd'), щоб переконатися, що зміни були об'єднані, а потім натисніть, якщо буде успішно (введено &&між командами)
bryn

49

Перед виконанням

git branch --delete <branch>

переконайтеся, що спочатку визначите, яка точна назва віддаленої гілки, виконавши:

git ls-remote

Це підкаже, що саме ввести для <branch>значення. (з урахуванням branchрегістру!)


46

Використання:

git push origin :bugfix  # Deletes remote branch
git branch -d bugfix     # Must delete local branch manually

Якщо ви впевнені, що хочете видалити його, запустіть

git branch -D bugfix

Тепер для очищення видалених віддалених гілок запустіть

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