Как удалить ветку 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)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_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
списка.
В настройках Bash я использую следующее :
alias git-shoot="git push origin --delete"
Тогда вы можете позвонить:
git-shoot branchname
В короткие ответы
Если вам нужны более подробные объяснения следующих команд, см. Подробные ответы в следующем разделе.
Удаление удаленной ветки
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
Длинный ответ : есть три различные ветви , чтобы удалить!
Когда вы имеете дело с удалением веток как локально, так и удаленно, имейте в виду, что задействованы три разные ветки :
- Местное отделение
X
. - Ветвь удаленного происхождения
X
. - Локальная ветвь удаленного отслеживания,
origin/X
которая отслеживает удаленную веткуX
.
В оригинальном плакате использовались:
git branch -rd origin/bugfix
Который только удалил его локальную дистанционное отслеживание ветви origin/bugfix
, а не фактический удаленный филиал bugfix
на origin
.
Чтобы удалить эту фактическую удаленную ветку , вам нужно
git push origin --delete bugfix
Дополнительные детали
В следующих разделах описываются дополнительные сведения, которые следует учитывать при удалении веток удаленного и удаленного отслеживания.
Нажатие на удаление удаленных веток также удаляет ветки удаленного отслеживания
Обратите внимание, что удаление удаленной ветки 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
Смотрите также
С января 2013 года GitHub включил Delete branchкнопку рядом с каждой веткой на вашей странице «Ветви».
Соответствующее сообщение в блоге: создание и удаление веток
Теперь вы можете сделать это с помощью приложения GitHub Desktop .
После запуска приложения
- Щелкните проект, содержащий ветку
Переключитесь на ветку, которую хотите удалить
В меню «Ветвь» выберите «Отменить публикацию ...», чтобы удалить ветку с серверов GitHub.
В меню «Ветвь» выберите «Удалитьимя_ветки »...», чтобы ветка была удалена с вашего локального компьютера (он же машина, на которой вы в настоящее время работаете).
Удалить локально - (нормально)
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 branch -d {the_local_branch}
(используйте -D
вместо этого для принудительного удаления ветки без проверки объединенного статуса)
Чтобы удалить удаленную ветку с сервера:
git push origin --delete {the_remote_branch}
Удалить локально:
Чтобы удалить локальную ветку, вы можете использовать:
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
после удаления удаленной ветки выполните на других машинах, чтобы удалить устаревшие ветки отслеживания.
Удачного кодирования :)