Как удалить ветку Git локально и удаленно?

16970

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

Неудачные попытки удалить удаленную ветку

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

Мэтью Ранкин
источник
1061
Примечание модератора: Если вы намереваетесь ответить на этот вопрос, учтите, что уже опубликовано 40 ответов. Будет ли ваш новый ответ добавить существенную ценность?
Роберт Харви
54
Примечание: для Git 2.5+ (2 квартал 2015 года) точное сообщение будет " deleted remote-tracking branch": см. Github.com/git/git/commit/…
VonC
Вас может заинтересовать этот скрипт, который упрощает различие между удалением локальной ветки и удаленной: tlbx.app/blog/delete-any-git-branch-the-easy-way
Mig
@RobertHarvey только 39 сейчас
Адам
@ Adam: 81. 42 ответа были удалены по разным причинам. Необъяснимая одержимость публики конкретной темой - одна из величайших загадок жизни.
Роберт Харви

Ответы:

21439

Управляющее резюме

$ 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

Boom. Нет больше веток на вашем сервере. Возможно, вы захотите просмотреть эту страницу, потому что вам понадобится эта команда, и вы, вероятно, забудете синтаксис. Чтобы запомнить эту команду, нужно вспомнить 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 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
Вопрос был «Что мне нужно сделать по-другому, чтобы успешно удалить ветку remotes / origin / bugfix как локально, так и на GitHub?» После выполнения команд в вашем обновленном ответе локальная ветвь все еще присутствует. Было бы хорошо, если бы принятый ответ был полным ответом. Его совершенно удивительно, как трудно Git делает простые задачи ...
jww
3317

Ответ Мэтью хорош для удаления удаленных веток, и я также ценю объяснение, но для того, чтобы сделать простое различие между двумя командами:

Чтобы удалить локальную ветку с вашего компьютера:

git branch -d {the_local_branch}(используйте -Dвместо этого, чтобы принудительно удалить ветку без проверки статуса объединения)

Чтобы удалить удаленную ветку с сервера:

git push origin --delete {the_remote_branch}

Ссылка: Git: Удалить ветку (локальную или удаленную)

Эрик Бротто
источник
250
@megido well -Dforce удаляет, -dвыдает предупреждение, если оно еще не слито.
TankorSmash
8
Если ваша локальная ветвь не слилась с master и не запустилась, '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
12
Я бы предложил использовать -d вместо -D, потому что это безопаснее. Если -d терпит неудачу из-за неутвержденных коммитов, вам нужно это оценить, и если удаление определенно нормально, используйте -D.
Роби
7
Другие с клонами репозитория, где удаленные ветви были удалены git remote prune <name>(например git remote prune origin), должны локально удалять устаревшие ветви, которых больше нет в удаленном.
code_dredd
3
Я хотел бы добавить, что -d выдает предупреждение, если оно не объединено с текущим заголовком. Если вам нужна ясность, я рекомендую эту команду. git branch -a --merged origin/masterОна перечислит любые ветви, как локальные, так и удаленные; которые были объединены в мастера. Дополнительная информация здесь
Эрик
2043

В короткие ответы

Если вам нужны более подробные объяснения следующих команд, см. Подробные ответы в следующем разделе.

Удаление удаленной ветки

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из командной строки с помощью 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 fetch" изучил --all и --multipleопции, чтобы запустить выборку из многих репозиториев, а также --pruneвозможность удалить удаленные ветви отслеживания, которые устарели. Это делает «git remote update» и «git remote prune» менее необходимыми (однако, не планируется удалять ни «remote update», ни «remote prune»).

Альтернатива вышеупомянутому автоматическому сокращению для устаревших удаленных отслеживающих ветвей

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

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

Смотрите также

Питер Мортенсен
источник
Из вашей иллюстрации видно, что существуют локальные репозитории клонов и репозитории с удаленным происхождением. Итак, есть как минимум две физические ветви. Где удалить третью ветку? Является ли третья ветвь только указателем, указывающим на коммит в локальном репозитории клонов?
Хагги
6
@ Huggie, это в значительной степени правильно. Ветви в Git - это просто закладки, прикрепленные к коммитам. Так что на моих графиках выше есть Xи origin/Xзакладки в локальном клоне (2 ветви), а затем и Xна удаленном (создание 3 ветви).
6
+1 за ветку удаленного слежения. Эта ветка вызывает проблемы, когда вы клонируете чужую ветку. Он продолжает отслеживать ваши коммиты и спрашивать вас, хотите ли вы нажать на ветку этого человека.
Kermit_ice_tea
1
Графика в одиночку - золото .
Mogens TrasherDK
1
Ради будущих читателей: то, о чем @Kermit_ice_tea говорит выше, это локальная ветвь (как описано в этом ответе), а не ветвь удаленного отслеживания . Когда для локальной ветки настроена «восходящая ветка», она по умолчанию извлекает и передает эту удаленную ветку. Местное отделение , которое имеет «вверх по течению ветви» , установленной на нем называется «отслеживание отрасли» , поэтому его легко спутать с дистанционным отслеживающими отраслями из - за подобную терминологию.
Дэвид П
1523

Шаги по удалению ветки:

Для удаления удаленной ветки:

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), перед удалением локальной ветки.
BaDr Amer
Когда ветки удаляются в источнике, ваш локальный репозиторий не заметит этого. У вас все еще будут локально кэшированные версии этих веток (что на самом деле хорошо), но git branch -a все равно перечислит их как удаленные ветки. Вы можете очистить эту информацию локально следующим образом: git remote prune originваши локальные копии удаленных веток не удаляются этим. Тот же эффект достигается при использованииgit fetch --prune
vibs2006
2
Изображение отвлекающее и очень большое и ничего не добавляет к ответу. Я надеюсь, что это не станет тенденцией на SO.
jmiserez
797

Вы также можете использовать следующее, чтобы удалить удаленную ветку

git push --delete origin serverfix

Который делает то же самое, что и

git push origin :serverfix

но это может быть легче запомнить.

pagetribe
источник
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.

pfrenssen
источник
14
Вы должны уточнить, что вышеуказанная git pushоперация удаляет локальную ветвь и удаленную ветвь.
Анника Бэкстрем
22
Обратите внимание, что git remote pruneэто несколько устаревший способ удаления устаревших веток удаленного отслеживания, более новый способ сделать это - использовать git fetch --pruneили git fetch -p.
1
@RRMadhav, действительно, вы не увидите удаленную ветку после ее удаления, поскольку ссылка на удаленную ветку будет удалена для вас локально. Любой другой член вашей команды, который проверил эту ветку, все еще будет иметь эту ссылку и будет видеть ее, пока не удалит ветку.
pfrenssen
362

Если вы хотите удалить ветку, сначала оформите заказ на ветку, отличную от удаляемой ветви.

git checkout other_than_branch_to_be_deleted

Удаление местного филиала:

git branch -D branch_to_be_deleted

Удаление удаленной ветки:

git push origin --delete branch_to_be_deleted
Правин Хиремат
источник
261
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, если хотите плакать.
Фелипе
225

Это просто: просто запустите следующую команду:

Чтобы удалить ветку Git как локально, так и удаленно, сначала удалите локальную ветку с помощью этой команды:

git branch -d example

(Вот exampleназвание филиала.)

И после этого удалите удаленную ветку с помощью этой команды:

git push origin :example
Syeful Ислам
источник
199

Другой подход:

git push --prune origin

ВНИМАНИЕ: Это удалит все удаленные ветви, которые не существуют локально. Или более всесторонне,

git push --mirror

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

imanuelcostigan
источник
1
git push --prune origin ничего не сделал для меня на gitlab: git clone git: //repo.git; git branch -d -r origin / some-branch; git push - происхождение черны; доходность: все современное; мерзкий выбор; возвращает локально удаленные ветви; git push --mirror; теперь их действительно нет!
eMBee
166

Я использую следующее в моих настройках Bash :

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

Тогда вы можете позвонить:

git-shoot branchname
crizCraig
источник
11
В итоге я просто добавил псевдоним "стрелять" в мой .gitconfig shoot = push origin --delete
hdost
Если ваш источник - Atlassian Stash и ветвь установлена ​​по умолчанию, вы получите сообщение об ошибке «По умолчанию удаление текущей ветки запрещено ...». Мне пришлось изменить ветку по умолчанию в Stash, чтобы указать другую ветку, прежде чем я мог удалить.
neoscribe 12.12.14
Это очень просто, как вы это сделали, но 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! Интересно, что это только недавнее дополнение.
Кэм Джексон
6
Я собирался указать на это. Обратите внимание, что кнопка не удалит вашу локальную ветку ... см. Этот ответ, чтобы узнать, как это сделать: stackoverflow.com/a/10999165/901641
ArtOfWarfare,
127

Если вы хотите выполнить оба этих шага с помощью одной команды, вы можете создать для нее псевдоним, добавив следующее в ваш ~/.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(заглавная буква D).

Райан Кон
источник
6
Это то, что я искал. Мой псевдоним функции оболочки не работал (Неожиданный EOF), и я не мог понять почему, но это прекрасно работает! Единственное изменение , которое я сделал заменял &&с , ;так что даже если первой командой не вторая по- прежнему будет выполнять (иногда только локальный или удаленный только существую).
user1021726 16.12.14
116

Удалить вашу ветку локально и удаленно

  • Оформить заказ в мастер-филиал - git checkout master

  • Удалить вашу удаленную ветку - git push origin --delete <branch-name>

  • Удалить ваше местное отделение - git branch --delete <branch-name>

mfathy00
источник
113

Вы также можете сделать это с помощью git remote prune origin

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

Он удаляет и удаляет ветки удаленного отслеживания из git branch -rсписка.

nickleefly
источник
108

В дополнение к другим ответам я часто использую инструмент git_remote_branch . Это дополнительная установка, но она дает вам удобный способ взаимодействия с удаленными филиалами. В этом случае удалить:

grb delete branch

Я считаю , что я также использовать publishи trackкоманды довольно часто.

u2622
источник
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
⚠️ git branch -DТщательно используйте в скрипте, так как он принудительно удаляет ветку, не проверяя ее слияние. Используйте, -dчтобы быть в безопасности.
Цезарсоль
94

Удаление ветвей

Предположим, что наша работа над веткой "contact-form" завершена, и мы уже интегрировали ее в "master". Так как он нам больше не нужен, мы можем удалить его (локально):

$ git branch -d contact-form

И для удаления удаленной ветки:

git push origin --delete contact-form
Улисс Алвес
источник
87

Удалить удаленную ветку

git push origin :<branchname>

Удалить локальную ветку

git branch -D <branchname>

Удалить шаги локальной ветки:

  1. оформить заказ в другой филиал
  2. удалить локальную ветку
jayxhj
источник
3
Требуется ли для удаления удаленной ветки «git push»?
Самита Чатуранга
@SamithaChathuranga нет, git push origin :<branchname>уже выдвигает «пустую» ветку на удаленный (следовательно, удаляет удаленную ветвь)
Михал Шайбе
86

Просто скажи:

git branch -d <branch-name>
git push origin :<branch-name>
piyushmandovra
источник
Это работает, если это ваша собственная ветка. Но если вы обрежете все ненужные ветви в репо (некоторые из которых не ваши), этого будет недостаточно
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
@Demedeor, я не согласен. В 2010 году, когда ОП задал вопрос, пользовательского интерфейса не было, и единственным вариантом была командная строка. Чтобы указать, что вам нужна опция только для командной строки, это должно быть указано в вопросе или с тегом, интерфейс командной строки , которого в данном случае нет.
Эрик
3
Команда git для удаления удаленной ветки - отстой, и я склонен ее забывать (как новую, так и старую). К счастью, есть инструменты с графическим интерфейсом, которые имеют такую ​​возможность. У Git Gui, TortoiseGit и GitHub Desktop это есть - я бы хотел, чтобы у Git Extensions была и эта функциональность. В любом случае, я помню, как запускать Git Gui из Git Extensions, когда мне нужно удалить удаленную ветку.
Везенков
81

Это очень просто:

Удалить удаленную ветку

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.
Вивек Мару
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.

Графическое представление:

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

Мохидин бен Мухаммед
источник
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
Greg
источник
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самом деле будет что-то делать:

Пользователь А выполняет шаги, описанные выше. Пользователь 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так и на местном уровне.

arthurakay
источник
7
подробно остановимся на этом, --delete "$@"и -D "$@"вместо этого $1будем обрабатывать его по нескольким веткам.
кунл
3
Я предлагаю git branch -dсначала запустить (с нижним регистром 'd'), чтобы убедиться, что изменения были объединены, а затем нажать в случае успеха (вставить &&между командами)
Брин
49

Перед выполнением

git branch --delete <branch>

убедитесь, что вы сначала определите, что именно имя удаленной ветви, выполнив:

git ls-remote

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

jbooker
источник
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
пользователь
источник