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

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

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

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

Ответов (25)

Решение

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

$ 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 ]
Также обратите внимание, что git branch -d branch_name это не удастся, если вы в данный момент находитесь в ветке, которую хотите удалить. Сообщение начинается с error: Cannot delete the branch 'branch_name' . Если это так, первый переключатель в какой - то другой ветви, например: git checkout main .

Удалить удаленную ветку [Обновлено 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]. Если вы хотите удалить ветку server-fix с сервера, выполните следующее:

$ git push origin :serverfix
To [email protected]:schacon/simplegit.git
 - [deleted]         serverfix

Бум. На вашем сервере больше нет веток. Возможно, вы захотите выслушать эту страницу, потому что вам понадобится эта команда, и вы, вероятно, забудете синтаксис. Чтобы запомнить эту команду, можно вспомнить git push [remotename] [localbranch]:[remotebranch]синтаксис, который мы рассмотрели немного ранее. Если вы опустите [localbranch]часть, то вы, по сути, говорите: «Не принимайте ничего на моей стороне и сделайте это [remotebranch]».

Оформил git push origin: bugfix и красиво заработало. Скотт Чакон был прав - я хочу выслушать эту страницу (или практически собачьим ухом, ответив на этот вопрос на Stack Overflow).

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

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

распространять изменения.

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

git push --delete origin serverfix

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

git push origin :serverfix

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

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

grb delete branch

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

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

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 .

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

git push --prune origin

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

git push --mirror

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

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

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

$ git remote prune origin
Pruning origin
URL: [email protected]/yourrepo.git
 * [pruned] origin/some-branchs

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

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

git checkout other_than_branch_to_be_deleted

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

git branch -D branch_to_be_deleted

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

git push origin --delete branch_to_be_deleted

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

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

git branch -d example

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

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

git push origin :example

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

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

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

git-shoot branchname

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

Предположим, наша работа над веткой «контактная форма» завершена и мы уже интегрировали ее в «мастер». Поскольку он нам больше не нужен, мы можем удалить его (локально):

$ git branch -d contact-form

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

git push origin --delete contact-form

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

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

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

  • Удалите свой локальный филиал - git branch --delete <branch-name>

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

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

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

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

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

Удаление устаревшей локальной ветки удаленного отслеживания origin / 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» менее необходимыми (хотя нет плана удалять «удаленное обновление» или «удаленное удаление»).

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

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

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

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

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

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

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

git push origin :branchName

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

git push origin :<branchname>

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

git branch -D <branchname>

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

  1. оформить заказ в другой филиал
  2. удалить местную ветку

Один вкладыш команда для удаления как местная, так и удаленная :

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"

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

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

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

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

  1. Щелкните проект, содержащий ветку
  2. Переключитесь на ветку, которую хотите удалить

    Коммутационная ветвь

  3. В меню «Ветвь» выберите «Отменить публикацию ...», чтобы удалить ветку с серверов GitHub.

    Отменить публикацию ветки

  4. В меню «Ветвь» выберите «Удалитьимя_ветки »...», чтобы ветка была удалена с вашего локального компьютера (он же машина, на которой вы в настоящее время работаете).

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

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

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.

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

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

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

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

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

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

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

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

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

git push origin --delete {the_remote_branch}

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

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

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

git branch -d <branch_name>

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

git branch -D <branch_name>

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

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

git push origin :branchname

git push origin --delete branchname

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

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

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

git push -d origin <branch-name>

Или

git push origin :<branch-name>

- Вы также можете удалять теги с этим синтаксисом

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

git branch -D <branch-name>

Примечание: git fetch --all --prune после удаления удаленной ветки выполните на других машинах, чтобы удалить устаревшие ветки отслеживания.

Удачного кодирования :)