Как удалить ветку Git локально и удаленно? - PullRequest
15427 голосов
/ 05 января 2010

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

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

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

Ответы [ 38 ]

19322 голосов
/ 05 января 2010

Резюме

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

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

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

Чтобы удалить локальную ветвь 1010 *, используйте одно из следующих:

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

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

git fetch --all --prune

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

3044 голосов
/ 12 июня 2012

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

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

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

1763 голосов
/ 30 мая 2014

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

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

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

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

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

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

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

См. Также

1333 голосов
/ 27 июня 2017

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

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

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, которые просто удаляют локальную ветку ONLY ! ...

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

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

delete a remote and local branch in git

755 голосов
/ 28 октября 2011

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

git push --delete origin serverfix

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

git push origin :serverfix

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

362 голосов
/ 07 ноября 2012

Совет: при удалении веток с помощью

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.

360 голосов
/ 07 октября 2014

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

git checkout other_than_branch_to_be_deleted

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

git branch -D branch_to_be_deleted

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

git push origin --delete branch_to_be_deleted
260 голосов
/ 24 октября 2013
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
221 голосов
/ 15 февраля 2015

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

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

git branch -d example

(здесь example - название филиала)

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

git push origin :example
193 голосов
/ 18 ноября 2012

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

git push --prune origin

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

git push --mirror

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

...