Как удалить ветку 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?
46 ответов
Управляющее резюме
$ git push --delete <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 сентября 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
распространять изменения.
Ответ Мэтью хорош для удаления удаленных веток, и я также ценю объяснение, но для того, чтобы сделать простое различие между двумя командами:
Чтобы удалить локальную ветку с вашего компьютера:
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
Короткие ответы
Если вам нужны более подробные объяснения следующих команд, см. Подробные ответы в следующем разделе.
Удаление удаленной ветки:
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 разные ветви:
- Местное отделение
X
, - Удаленная ветка происхождения
X
, - Местное отделение удаленного слежения
origin/X
который отслеживает удаленную веткуX
,
Оригинальный постер использовал
git branch -rd origin/bugfix
который только удалил свою локальную ветку удаленного слежения origin/bugfix
а не фактическая удаленная ветка bugfix
на origin
,
Чтобы удалить эту фактическую удаленную ветку, вам нужно
git push origin --delete bugfix
дополнительные детали
В следующих разделах описываются дополнительные детали, которые необходимо учитывать при удалении веток удаленного и удаленного отслеживания.
Нажатие на удаление удаленных веток также удаляет удаленные ветви отслеживания
Обратите внимание, что удаление удаленной ветви 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 remote prune" менее необходимыми (однако, не планируется удалять ни "remote update", ни "remote prune").
Альтернатива вышеупомянутому автоматическому сокращению для устаревших удаленных отслеживающих ветвей
Кроме того, вместо удаления устаревших локальных удаленных веток через git fetch -p
вы можете избежать дополнительных сетевых операций, просто удалив ветку (и) вручную --remote
или же -r
флаги:
git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter
Смотрите также
Шаги по удалению ветки:
для удаления удаленной ветки:
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 push --delete origin serverfix
Который делает то же самое, что и
git push origin :serverfix
но это может быть легче запомнить.
Это очень просто
Удалить удаленную ветку
git push -d origin <branch-name>
ИЛИ ЖЕ
git push origin :<branch-name>
Удалить локальную ветку
git branch -D <branch-name>
Совет: при удалении веток с помощью
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 checkout other_than_branch_to_be_deleted
Удаление местного филиала:
git branch -D branch_to_be_deleted
Удаление удаленной ветки:
git push origin --delete branch_to_be_deleted
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
Это просто: просто запустите следующую команду:
Чтобы удалить ветку Git как локально, так и удаленно, сначала удалите локальную ветку, используя команду:
git branch -d example
(Вот example
это название филиала)
И после этого удалите удаленную ветку командой:
git push origin :example
Другой подход
git push --prune origin
ВНИМАНИЕ: Это удалит все удаленные ветви, которые не существуют локально. Или более всесторонне,
git push --mirror
эффективно сделает удаленный репозиторий похожим на локальную копию репозитория (локальные заголовки, пульты и теги отражаются на удаленном).
Я использую следующее в моих настройках Bash:
alias git-shoot="git push origin --delete"
Тогда вы можете позвонить:
git-shoot branchname
Удалить локально:
Чтобы удалить локальную ветку, вы можете использовать:
git branch -d branch_name
Чтобы принудительно удалить ветку, используйте -D
вместо -d
,
git branch -D branch_name
Удалить удаленно:
Есть два варианта:
git push origin :branchname
git push origin --delete branchname
Я бы предложил вам использовать 2-й способ, так как он более интуитивно понятен.
Если вы хотите выполнить оба эти действия с помощью одной команды, вы можете создать для нее псевдоним, добавив нижеприведенный ~/.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).
С января 2013 года GitHub включал кнопку " Удалить ветку" рядом с каждой веткой на странице "Филиалы".
Соответствующее сообщение в блоге: создание и удаление веток
Удалить вашу ветку локально и удаленно
Оформить заказ в мастер-филиал -
git checkout master
Удалить вашу удаленную ветку -
git push origin --delete <branch-name>
Удалить ваше местное отделение -
git branch --delete <branch-name>
Вы также можете сделать это с помощью git remote prune origin
:
$ git remote prune origin
Pruning origin
URL: git@example.com/yourrepo.git
* [pruned] origin/some-branchs
Это сокращает и удаляет удаленные отслеживания ветви из git branch -r
листинга.
В дополнение к другим ответам я часто использую инструмент git_remote_branch. Это дополнительная установка, но она дает вам удобный способ взаимодействия с удаленными филиалами. В этом случае удалить:
grb delete branch
Я считаю, что я также использую publish
а также track
команды довольно часто.
Одной командой 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"
Предположим, что наша работа над веткой "contact-form" завершена, и мы уже интегрировали ее в "master". Так как он нам больше не нужен, мы можем удалить его (локально):
$ git branch -d contact-form
И для удаления удаленной ветки:
git push origin --delete contact-form
Удалить Локально - (Нормально),
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 :<branchname>
Удалить локальную ветку
git branch -D <branchname>
Удалить шаги локальной ветки:
- оформить заказ в другой филиал
- удалить локальную ветку
Просто скажи:
git branch -d <branch-name>
git push origin :<branch-name>
Теперь вы можете сделать это с помощью приложения GitHub Desktop.
После запуска приложения
- Нажмите на проект, содержащий ветку
- Переключитесь на ветку, которую хотите удалить
- В меню "Ветка" выберите "Отменить публикацию...", чтобы удалить ветку с серверов GitHub.
- В меню "Ветвь" выберите "Удалить"имя_ветвления", чтобы удалить ветку с вашего локального компьютера (или компьютера, на котором вы сейчас работаете).
git push origin --delete branchName
легче запомнить, чем
git push origin :branchName
Это не будет работать, если у вас есть тег с тем же именем, что и ветка на пульте:
$ 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
Согласно последнему документу, используя терминал, мы можем удалить следующим образом.
удалить в локальном:
git branch -D usermanagement
удалить в удаленном месте:
git push --delete origin usermanagement
Многие другие ответы приведут к ошибкам / предупреждениям. Этот подход является относительно надежным, хотя вам может понадобиться 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
Мне надоело искать этот ответ, поэтому я применил аналогичный подход к ответу, который ранее опубликовал crizCraig.
Добавил следующее в мой профиль Bash:
function gitdelete(){
git push origin --delete $1
git branch -D $1
}
Затем каждый раз, когда я закончу с веткой (объединены в master
Например, я запускаю в своем терминале следующее:
gitdelete my-branch-name
... который затем удаляет my-branch-name
от origin
а также на местном уровне.
Перед выполнением
git branch --delete <branch>
сначала убедитесь, что вы определили EXACT-имя удаленной ветви, выполнив:
git ls-remote
Это скажет вам, что ввести именно для <branch>
значение. (branch
чувствителен к регистру!)