Как удалить ветку Git как локально, так и удаленно?
Я хочу удалить ветку как локально, так и на моем удаленном проекте fork on 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?
30 ответов
Резюме
$ git push --delete <remote_name> <branch_name>
$ git branch -d <branch_name>
обратите внимание, что в большинстве случаев удаленные имя origin
.
Удалить Локальную Ветку
удалить местные ветка используйте одно из следующих:
$ git branch -d branch_name
$ git branch -D branch_name
Примечание: на псевдоним --delete
, который удаляет только ветвь, если она уже была полностью объединена в своей восходящей ветви. Вы также можете использовать -D
, который является псевдонимом для --delete --force
, которым удаляет ветку " независимо от ее объединенного статуса."[Источник: man git-branch
]
удалить удаленную ветку [Обновлено 8-Sep-2017]
по состоянию на Git v1.7.0, вы можете удалить пульт ДУ через филиал
$ git push <remote_name> --delete <branch_name>
что может быть легче запомнить, чем
$ git push <remote_name> :<branch_name>
, который был добавлен в Git v1.5.0 " для удаления удаленной ветви или тега."
на Git П2.8.0 вы также можете использовать git push
С в качестве псевдонима для --delete
.
поэтому версия git, которую вы установили, будет диктовать, нужно ли использовать более простой или более сложный синтаксис.
удалить удаленную ветку [оригинальный ответ от 5-Jan-2010]
из главы 3 Pro Git Скотт Чакон:
Удаление Удаленных Филиалов
Предположим, вы закончили с удаленной веткой-скажем, вы и ваши сотрудники закончили с функцией и объединили ее в главную ветвь вашего пульта (или в какой-либо ветви вашей стабильной кодовой линии). Вы можете удалить удаленную ветку, используя довольно тупой синтаксис
git push [remotename] :[branch]
. Если вы хотите удалить ветвь serverfix с сервера, выполните следующие действия:$ git push origin :serverfix To git@github.com:schacon/simplegit.git - [deleted] serverfix
бум. Нет больше ветки на вашем сервере. Вы можете захотеть прослушивать эту страницу, потому что вам понадобится эта команда, и вы, вероятно забыл синтаксис. Способ запомнить эту команду-вспомнить
git push [remotename] [localbranch]:[remotebranch]
синтаксис, который мы перешли немного раньше. Если вы оставите[localbranch]
часть, тогда вы в основном говорите: "ничего не принимайте на моей стороне и сделайте это[remotebranch]
."
я издал git push origin :bugfix
и это сработало прекрасно. Скотт Чакон был прав-я хочу этого!--73-->собака уха эта страница (или практически ухо собаки, отвечая на это при переполнении стека).
тогда вы должны выполнить это на других машинах
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
on 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
обрезка устаревшей локальной ветви удаленного отслеживания 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
options, чтобы запустить выборку из много хранилищ, и--prune
возможность удаления удаленного отслеживания ветви, которые стали черствыми. это делает "удаленное обновление git" и " git remote prune "менее необходим (нет плана по удалению" remote обновление " или "удаленная чернослив", хотя).
альтернатива выше автоматическая обрезка устаревших удаленные ветки
альтернативно, вместо обрезки устаревших локальных ветвей удаленного отслеживания через 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
to удалить только удаленную ветку, добавьте имя ветви в конце, и это удалит и подтолкнет его к удаленному в то же время время...
и git branch -D
, которые просто удаляют локальную ветку только!...
-D
расшифровывается как --delete --force
который удалит ветку, даже если она не объединена (принудительное удаление), но вы также можете использовать -d
что означает --delete
которые вызывают ошибку, соответствующую состоянию слияния ветвей...
я также создаю изображение ниже, чтобы показать шаги:
вы также можете использовать следующее Для удаления удаленной ветви.
git push --delete origin serverfix
который делает то же самое как
git push origin :serverfix
но это может быть легче запомнить.
Если вы хотите удалить ветку, сначала проверьте ветку, отличную от ветки, которая будет удалена.
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 <branchname> # deletes local branch
или
git push origin :<branchname> # deletes remote branch
удаляются только ссылки. Несмотря на то, что ветвь фактически удалена на удаленном компьютере, ссылки на нее все еще существуют в локальных репозиториях членов вашей команды. Это означает, что для других членов команды удаленные ветви по-прежнему видны, когда они делают git branch -a
.
чтобы решить эту проблему, члены вашей команды могут обрезать удаленные ветви с помощью
git remote prune <repository>
Это обычно git remote prune origin
.
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
эффективно сделает удаленный репозиторий похожим на локальную копию репозитория (локальные головки, пульты и теги зеркально отображаются на удаленном).
Я использую следующее В моем Баш параметры:
alias git-shoot="git push origin --delete"
затем вы можете позвонить:
git-shoot branchname
с января 2013 года GitHub включил удалить ветку кнопка рядом с каждой веткой на странице" ветви".
соответствующий пост в блоге:создание и удаление веток
если вы хотите выполнить оба эти действия с помощью одной команды, вы можете создать псевдоним для него, добавив в свой ~/.gitconfig
:
[alias]
rmbranch = "!f(){ git branch -d && git push origin --delete ; };f"
кроме того, вы можете добавить это в глобальную конфигурацию из командной строки с помощью
git config --global alias.rmbranch \
'!f(){ git branch -d && git push origin --delete ; };f'
Примечание при использовании -d
(нижний регистр d), ветвь будет удалена только в том случае, если она была объединена. Чтобы принудительно удалить, вам нужно будет использовать -D
(верхний регистр D).
удалить вашу ветку локально и удаленно
выезд на главную ветку -
git checkout master
удалить удаленную ветку -
git push origin --delete <branch-name>
удалить локальную ветку -
git branch --delete <branch-name>
удалить локально:
чтобы удалить локальную ветку, вы можете использовать:
git branch -d branch_name
чтобы удалить ветку принудительно, используйте -D
вместо -d
.
git branch -D branch_name
удалить удаленно:
есть два варианта:
git push origin :branchname
git push origin --delete branchname
Я бы предложил вам использовать 2-й способ, поскольку он более интуитивно понятен.
вы также можете сделать это с помощью 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
команды довольно часто.
предположим, что наша работа над филиалом " контакт-форма "завершена, и мы уже интегрировали его в"мастер". Поскольку он нам больше не нужен, мы можем удалить его (локально):
$ git branch -d contact-form
и для удаления удаленного филиала:
git push origin --delete contact-form
один лайнер команда удалить как местные, так и удаленные:
D=branch-name; git branch -D $D; git push origin :$D
или добавить псевдоним в ~/.gitconfig хранит настройки; использование: git kill branch-name
[alias]
kill = "!f(){ git branch -D \"\"; git push origin --delete \"\"; };f"
удалить удаленную ветку
git push origin :<branchname>
удалить локальную ветку
git branch -D <branchname>
удалить шаги локальной ветви:
- выезд в другой филиал
- удалить локальную ветку
теперь вы можете сделать это с помощью GitHub Desktop app.
после запуска приложения
- нажмите на проект, содержащий филиала
- переключиться на ветку, которую вы хотите удалить
- в меню "филиал", "выбор", "отменить публикацию...", чтобы ветвь была удалена с серверов GitHub.
- в меню "филиал", "выбор", "удалить". "branch_name"...', чтобы ветвь была удалена с вашей локальной машины (она же машина, над которой вы сейчас работаете)
удалить локально (нормальный),
git branch -d my_branch
если ваша ветка в процессе перебазирования / слияния, и это не было сделано должным образом, означает, что вы получите ошибку Rebase/Merge in progress
так что в этом случае, вы не сможете удалить свою ветку.
так что либо ваша потребность решить перебазирование / слияние в противном случае вы можете сделать force Delete с помощью,
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.
Графическое Представление,
Это не будет работать, если у вас есть тег с таким же именем, как ветка на пульте:
$ 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
мне надоело гуглить для этого ответа, поэтому я принял аналогичный подход к ответ, который опубликовал crizCraig раньше.
добавлено следующее в мой профиль Bash:
function gitdelete(){
git push origin --delete
git branch -D
}
затем каждый раз, когда я закончил с веткой (объединен в master
, например) я запускаю в своем терминале следующее:
gitdelete my-branch-name
...который затем удаляет my-branch-name
С origin
, а также местно.
многие другие ответы приведут к ошибкам / предупреждениям. Этот подход является относительно глупым доказательством, хотя вам все еще может понадобиться 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
на самом деле будет делать что-то:
пользователь A делает шаги выше. Пользователь B будет запускать следующие команды, чтобы увидеть самые современные удаленные ветви
git fetch
git remote prune origin
git branch -r
git push origin :bugfix # Deletes remote branch
git branch -d bugfix # Must delete local branch manually
Если вы уверены, что хотите удалить его, выполните команду
git branch -D bugfix
Теперь, чтобы очистить удаленные удаленные ветви run
git remote prune origin
перед выполнением
git branch --delete <branch>
убедитесь, что вы сначала определяете точное имя удаленной ветви, выполнив:
git ls-remote
это скажет вам, что именно ввести для <branch>
значение. (branch
чувствителен к регистру!)
Mashup всех других ответов. Требуется Ruby 1.9.3+, tested только на OS X.
вызовите этот файл git-remove
, сделайте его исполняемым и поместите его на свой путь. Затем используйте, например,git remove temp
.
#!/usr/bin/env ruby
require 'io/console'
if __FILE__ ==
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