Как удалить ветвь 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?

12465
задан Matthew Rankin 05 янв. '10 в 4:12
источник поделиться

40 ответов

  • 1
  • 2

Резюме

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

Обратите внимание, что в большинстве случаев удаленное имя origin.

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

Для удаления локальной ветки используйте одно из следующих действий:

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

Примечание. Параметр -d является псевдонимом для --delete, который удаляет ветвь только в том случае, если она уже полностью объединена в своей ветке вверх по течению. Вы также можете использовать -d, который является псевдонимом для --delete --force, который удаляет ветвь "независимо от ее объединенного состояния". [Источник: man git-branch]

Удалить удаленную ветвь [Обновлено 8-Sep-2017]

По Git v1.7.0 вы можете удалить ветвь remote, используя

$ 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 Скотта Чакона:

Удаление удаленных ветвей

Предположим, что вы сделали с удаленной веткой - скажем, вы и ваши сотрудники закончили с функцией и объединили ее в свою ветвь master remotes (или любую ветвь вашей стабильной кодовой линии). Вы можете удалить удаленную ветку, используя довольно тупой синтаксис git push [remotename] :[branch]. Если вы хотите удалить ветку serverfix с сервера, выполните следующее:

$ 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, и он работал красиво. Скотт Чакон был прав - я захочу уха собаки этой страницы (или фактически уха собаки, ответив на это переполнением стека).

Затем вы должны выполнить это на других машинах

git fetch --all --prune

для распространения изменений.

15405
ответ дан Matthew Rankin 05 янв. '10 в 4:13
источник поделиться

Ответ Matthew отлично подходит для удаления удаленных ветвей, и я также благодарен за объяснение, но для простого различия между двумя командами:

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

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

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

git push origin --delete {the_remote_branch}

Ссылка: https://makandracards.com/makandra/621-git-delete-a-branch-local-or-remote

2640
ответ дан Eric Brotto 12 июня '12 в 17:51
источник поделиться

Краткие ответы

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

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

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 разных ветки:

  • Локальная ветвь X.
  • Удаленная ветвь происхождения X.
  • Локальная ветвь удаленного отслеживания 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 из командной строки с помощью 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удаленная чернослив" меньше необходимости (нет плана для удаления "удаленных обновление" или "удаленная обрезка" ).

Альтернативная автоматическая обрезка для устаревших ветвей удаленного отслеживания

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

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

См. также

1498
ответ дан user456814 30 мая '14 в 21:32
источник поделиться

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

git push --delete origin serverfix

Что делает то же самое, что

git push origin :serverfix

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

635
ответ дан pagetribe 28 окт. '11 в 1:22
источник поделиться

Шаги для удаления ветки:

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

git push origin --delete <your_branch> 

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

git branch -D <branch_name> 

Объясните: ОК, просто объясните, что происходит здесь!

Просто удалите удаленную ветку git push origin --delete, добавьте имя ветки в конец, и это удалит и одновременно удалит ее на удаленный...

Кроме того, git branch -D, которые просто удаляют локальную ветвь Только!...

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

Я также создаю изображение ниже, чтобы показать шаги:

удалить удаленный и локальный ветки в  git

479
ответ дан Alireza 27 июня '17 в 16:13
источник поделиться

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

git checkout other_than_branch_to_be_deleted

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

git branch -D branch_to_be_deleted

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

git push origin --delete branch_to_be_deleted
325
ответ дан Praveen Hiremath 07 окт. '14 в 16: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.

312
ответ дан pfrenssen 07 нояб. '12 в 16:02
источник поделиться
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
236
ответ дан Felipe Micaroni Lalli 24 окт. '13 в 20:36
источник поделиться

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

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

git branch -d example

(здесь example - имя ветки)

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

git push origin :example
198
ответ дан Syeful Islam 15 февр. '15 в 18:20
источник поделиться

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

git push --prune origin

ПРЕДУПРЕЖДЕНИЕ: Это удалит все удаленные ветки, которые не существуют локально. Или более всесторонне,

git push --mirror

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

169
ответ дан imanuelcostigan 18 нояб. '12 в 9:11
источник поделиться

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

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

Затем вы можете позвонить:

git-shoot branchname
140
ответ дан crizCraig 03 апр. '13 в 1:11
источник поделиться

С января 2013 года GitHub включил кнопку Delete branch рядом с каждой ветвью на странице "Ветки".

Соответствующая запись в блоге: Создание и удаление веток

107
ответ дан Nacho Coloma 29 апр. '13 в 13:39
источник поделиться

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

101
ответ дан Ryan Kohn 15 янв. '13 в 22:05
источник поделиться

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

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

git branch -d branch_name 

Чтобы удалить ветвь принудительно, используйте -D вместо -D.

git branch -D branch_name

Удалить удаленно:

Есть два варианта:

git push origin :branchname  

git push origin --delete branchname 

Я бы предложил вам использовать второй способ, поскольку он более интуитивно понятен.

94
ответ дан Rahul Gupta 23 мая '15 в 11:56
источник поделиться

Чтобы удалить филиал локально и удаленно

  • Оформить покупку в ветке - git checkout master

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

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

91
ответ дан mfathy00 04 янв. '16 в 0:08
источник поделиться

Вы также можете сделать это, используя git remote prune origin:

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

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

87
ответ дан nickleefly 12 марта '13 в 17:57
источник поделиться

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

grb delete branch

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

85
ответ дан u2622 24 марта '12 в 5:21
источник поделиться

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

Предположим, что наша работа над веткой "контакт-форма" выполнена, и мы уже интегрировали ее в "мастер". Поскольку нам это больше не нужно, мы можем удалить его (локально):

$ git branch -d contact-form

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

git push origin --delete contact-form
79
ответ дан Ulysses Alves 30 окт. '15 в 15:39
источник поделиться

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

git push origin :<branchname>

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

git branch -D <branchname>

Удалить шаги локального перехода:

  • проверка на другую ветку
  • удалить локальную ветвь
75
ответ дан jayxhj 31 дек. '16 в 12:22
источник поделиться

Одна команда liner удаляет как локальные, так и удаленные:

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"
75
ответ дан Vinnie James 17 нояб. '16 в 4:03
источник поделиться

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

git branch -d <branch-name>
git push origin :<branch-name>
71
ответ дан piyushmandovra 23 апр. '15 в 21:06
источник поделиться

Теперь вы можете сделать это с помощью приложения GitHub Desktop.

После запуска приложения

  • Нажмите проект, содержащий ветку
  • Перейдите к ветке, которую вы хотите удалить ветвь переключения
  • В меню "Отладка" выберите "Отменить публикацию...", чтобы ветвь удалилась с серверов GitHub. unublish branch
  • В меню "Ветка" выберите "Удалить" имя_каталога "...", чтобы ветвь удалилась с вашего локального компьютера (ака машина, над которой вы сейчас работаете) удалить локальную ветвь
65
ответ дан Eric 22 окт. '15 в 10:38
источник поделиться
git push origin --delete branchName

легче запомнить, чем

git push origin :branchName
61
ответ дан Smila 02 мая '15 в 13:59
источник поделиться

Чтобы удалить локально - (Обычный),

git branch -d my_branch

Если ваша ветка в процессе восстановления/слияния и что это не было сделано правильно, вы получите сообщение об ошибке Rebase/Merge in progress, поэтому в этом случае вы не сможете удалить свою ветку.

Таким образом, либо ваша необходимость разрешать переполнение/слияние в противном случае вы можете принудительно удалить, используя

git branch -d my_branch

Чтобы удалить в Remote:

git push --delete origin my_branch

может использовать то же самое,

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

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

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

60
ответ дан Mohideen ibn Mohammed 23 июня '17 в 9:42
источник поделиться

Это не сработает, если у вас есть тег с тем же именем, что и ветка на пульте дистанционного управления:

$ 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
52
ответ дан Amiramix 29 июля '14 в 12:02
источник поделиться

Мне досадно было заглянуть за этот ответ, поэтому я сделал аналогичный подход на ответ, который ранее опубликовал crizCraig

В мой профиль Bash добавлено следующее:

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

Затем каждый раз, когда я делаю это с веткой (например, слияние в master), я запускаю в моем терминале следующее:

gitdelete my-branch-name

... который затем удаляет my-branch-name из origin как локально.

40
ответ дан arthurakay 10 февр. '16 в 22:47
источник поделиться

Многие из других ответов приведут к ошибкам/предупреждениям. Этот подход относительно глупый, хотя вам может понадобиться 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
39
ответ дан Brandon Cook 27 нояб. '13 в 6:04
источник поделиться
git push origin :bugfix  # Deletes remote branch
git branch -d bugfix     # Must delete local branch manually

Если вы уверены, что хотите его удалить, запустите

git branch -D bugfix

Теперь очистка удаленных удаленных ветвей выполняется

git remote prune origin
37
ответ дан Vivek 21 апр. '16 в 19:49
источник поделиться

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

git branch --delete <branch>

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

git ls-remote

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

35
ответ дан joey 21 мая '16 в 0:42
источник поделиться

Я добавил следующие псевдонимы в мой файл .gitconfig. Это позволяет мне удалять ветки с указанием имени ветки или без нее. Имя ветки по умолчанию совпадает с текущей веткой, если аргумент не передан.

[alias]
    branch-name = rev-parse --abbrev-ref HEAD     

    rm-remote-branch = !"f() { branch=${1-$(git branch-name)}; git push origin :$branch; }; f"
    rm-local-branch = !"f() { branch=${1-$(git branch-name)}; git checkout master; git branch -d $branch; }; f"
    rm-branch-fully = !"f() { branch=${1-$(git branch-name)}; git rm-local-branch $branch; git rm-remote-branch $branch; }; f"
35
ответ дан Jared Knipp 22 февр. '17 в 20:20
источник поделиться
  • 1
  • 2

Другие вопросы по меткам