Как удалить ветку 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
как локально, так и удаленно?
Ответы
Ответ 1
Резюме
$ 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 сентября 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 [email protected]:schacon/simplegit.git
- [deleted] serverfix
Boom. Нет больше веток на вашем сервере. Возможно, вы захотите просмотреть эту страницу, потому что вам понадобится эта команда, и вы, скорее всего, забудете синтаксис. Чтобы запомнить эту команду, нужно вспомнить синтаксис git push [remotename] [localbranch]:[remotebranch]
, который мы рассмотрели чуть ранее. Если вы отказываетесь от части [localbranch]
, то в основном говорите: "Ничего не бери на моей стороне и сделай это [remotebranch]
".
Я выпустил git push origin: bugfix
, и он работал прекрасно. Скотт Чакон был прав - я хочу выучить ухо на этой странице (или, фактически, собачье ухо, ответив на Qaru).
Затем вы должны выполнить это на других машинах
# Fetch changes from all remotes and locally delete
# remote deleted branches/tags etc
# --prune will do the job :-;
git fetch --all --prune
для распространения изменений.
Ответ 2
Ответ мэтью отлично подходит для удаления удаленных веток, и я также благодарен за объяснение, но для того, чтобы провести простое различие между двумя командами:
Чтобы удалить локальную ветку со своего компьютера:
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
Ответ 3
Краткие ответы
Если вы хотите получить более подробные объяснения следующих команд, см. длинные ответы в следующем разделе.
Удаление удаленной ветки:
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
.
Оригинальный плакат, используемый
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 удаленное обновление" и "gitудаленная чернослив" меньше необходимости (нет плана для удаления "удаленных обновление" или "удаленная обрезка" ).
Альтернативная автоматическая обрезка для устаревших ветвей удаленного отслеживания
В качестве альтернативы вместо обрезания устаревших локальных ветвей удаленного отслеживания через git fetch -p
вы можете избежать дополнительной работы в сети, просто удалив ветвь (ветки) с помощью флагов --remote
или -r
:
git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter
См. также
Ответ 4
Шаги по удалению ветки:
Для удаления удаленной ветки:
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
, который выдает ошибку, соответствующую состоянию слияния ветки...
Я также создаю изображение ниже, чтобы показать шаги:
Ответ 5
Вы также можете использовать следующее, чтобы удалить удаленную ветку
git push --delete origin serverfix
Который делает то же самое, что и
git push origin :serverfix
но это может быть легче запомнить.
Ответ 6
Совет: при удалении веток с помощью
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
.
Ответ 7
Если вы хотите удалить ветвь, сначала выйдите в ветку, отличную от ветки, которую нужно удалить.
git checkout other_than_branch_to_be_deleted
Удаление локальной ветки:
git branch -D branch_to_be_deleted
Удаление удаленной ветки:
git push origin --delete branch_to_be_deleted
Ответ 8
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
Ответ 9
Это просто: просто запустите следующую команду:
Чтобы удалить ветвь Git как локально, так и удаленно, сначала удалите локальную ветку с помощью команды:
git branch -d example
(здесь example
- имя ветки)
И после этого удалите удаленную ветку с помощью команды:
git push origin :example
Ответ 10
Другой подход:
git push --prune origin
ВНИМАНИЕ: Это удалит все удаленные ветки, которые не существуют локально. Или более всесторонне,
git push --mirror
эффективно сделает удаленный репозиторий похожим на локальную копию репозитория (локальные заголовки, пульты и теги отражаются на удаленном).
Ответ 11
Я использую следующее в моих настройках Bash:
alias git-shoot="git push origin --delete"
Тогда вы можете позвонить:
git-shoot branchname
Ответ 12
С января 2013 года GitHub включал кнопку Delete branch рядом с каждой веткой на странице "Ветви".
Соответствующее сообщение в блоге: создание и удаление веток
Ответ 13
Удалить локально:
Чтобы удалить локальную ветку, вы можете использовать:
git branch -d <branch_name>
Чтобы принудительно удалить ветку, используйте -D
вместо -D
.
git branch -D <branch_name>
Удалить удаленно:
Есть два варианта:
git push origin :branchname
git push origin --delete branchname
Я бы предложил вам использовать 2-й способ, так как он более интуитивно понятен.
Ответ 14
Если вы хотите выполнить оба этих действия с помощью одной команды, вы можете сделать для нее псевдоним, добавив ниже к вашему ~/.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).
Ответ 15
Чтобы удалить филиал локально и удаленно
-
Оформить покупку в ветке - git checkout master
-
Удалите удаленную ветку - git push origin --delete <branch-name>
-
Удалите локальную ветку - git branch --delete <branch-name>
Ответ 16
Вы также можете сделать это, используя git remote prune origin
$ git remote prune origin
Pruning origin
URL: [email protected]/yourrepo.git
* [pruned] origin/some-branchs
Он удаляет и удаляет ветки удаленного отслеживания из списка git branch -r
.
Ответ 17
В дополнение к другим ответам я часто использую инструмент git_remote_branch. Это дополнительная установка, но она дает вам удобный способ взаимодействия с удаленными веткими. В этом случае удалить:
grb delete branch
Я нахожу, что я также часто использую команды publish
и track
Ответ 18
Одна команда 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"
Ответ 19
Удаление ветвей
Предположим, что наша работа над веткой "контакт-форма" выполнена, и мы уже интегрировали ее в "мастер". Поскольку нам это больше не нужно, мы можем удалить его (локально):
$ git branch -d contact-form
И для удаления удаленной ветки:
git push origin --delete contact-form
Ответ 20
Удалить удаленную ветвь
git push origin :<branchname>
Удалить локальную ветвь
git branch -D <branchname>
Удалить шаги локального перехода:
- проверка на другую ветку
- удалить локальную ветвь
Ответ 21
Просто скажите:
git branch -d <branch-name>
git push origin :<branch-name>
Ответ 22
git push origin --delete <branch Name>
легче запомнить, чем
git push origin :branchName
Ответ 23
Теперь вы можете сделать это с помощью приложения GitHub Desktop.
После запуска приложения
- Нажмите проект, содержащий ветку
- Перейдите к ветке, которую вы хотите удалить
- В меню "Отладка" выберите "Отменить публикацию...", чтобы ветвь удалилась с серверов GitHub.
- В меню "Ветка" выберите "Удалить" имя_каталога "...", чтобы ветвь удалилась с вашего локального компьютера (ака машина, над которой вы сейчас работаете)
Ответ 24
Чтобы удалить локально - (Обычный),
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.
Графическое представление
Ответ 25
Это не будет работать, если у вас есть тег с тем же именем, что и ветка на пульте:
$ 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 '[email protected]:SomeName/some-repo.git'
В этом случае вам нужно указать, что вы хотите удалить ветку, а не тег:
git push origin :refs/heads/branch-or-tag-name
Точно так же, чтобы удалить тег вместо ветки, вы должны использовать:
git push origin :refs/tags/branch-or-tag-name
Ответ 26
Многие другие ответы приведут к ошибкам/предупреждениям. Этот подход является относительно git branch -D branch_to_delete
хотя вам все еще может понадобиться 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
Ответ 27
Мне досадно было заглянуть за этот ответ, поэтому я сделал аналогичный подход
на ответ, который ранее опубликовал crizCraig
В мой профиль Bash добавлено следующее:
function gitdelete(){
git push origin --delete $1
git branch -D $1
}
Затем каждый раз, когда я делаю это с веткой (например, слияние в master
), я запускаю в моем терминале следующее:
gitdelete my-branch-name
... который затем удаляет my-branch-name
из origin
как локально.
Ответ 28
Перед выполнением
git branch --delete <branch>
убедитесь, что вы сначала определили, что такое EXACT имя удаленной ветки, выполнив:
git ls-remote
Это скажет вам, что вводить ТОЧНО для значения <branch>
. (branch
чувствителен к регистру!)
Ответ 29
Mashup всех других ответов. Требуется Ruby 1.9.3+
, протестировано только на OS X.
Назовите этот файл git-remove
, сделайте его исполняемым и поместите его по своему пути. Затем используйте, например, git remove temp
.
#!/usr/bin/env ruby
require 'io/console'
if __FILE__ == $0
branch_name = ARGV[0] if (ARGV[0])
print "Press Y to force delete local and remote branch #{branch_name}..."
response = STDIN.getch
if ['Y', 'y', 'yes'].include?(response)
puts "\nContinuing."
'git branch -D #{branch_name}'
'git branch -D -r origin/#{branch_name}'
'git push origin --delete #{branch_name}'
else
puts "\nQuitting."
end
end
Ответ 30
git push origin :bugfix # Deletes remote branch
git branch -d bugfix # Must delete local branch manually
Если вы уверены, что хотите его удалить, запустите
git branch -D bugfix
Теперь очистка удаленных удаленных ветвей выполняется
git remote prune origin