Как удалить ветку 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 [email protected]: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 различных ветвей, участвующих:

  1. местное отделение X.
  2. ветвь удаленного происхождения X.
  3. местное отделение удаленного отслеживания origin/X это отслеживает удаленную ветку X.

Visualization of 3 branches

оригинальный плакат используется

git branch -rd origin/bugfix

который только удалил его местное отделение дистанционного отслеживания origin/bugfix, а не фактическая удаленная ветвь bugfix on origin.

Diagram 2

чтобы удалить эту фактическую удаленную ветку необходимо

git push origin --delete bugfix

Diagram 3

Дополнительная Информация

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

нажатие для удаления удаленных ветвей также удаляет удаленные ветви отслеживания

обратите внимание, что удаление удаленной ветви 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 которые вызывают ошибку, соответствующую состоянию слияния ветвей...

я также создаю изображение ниже, чтобы показать шаги:

delete a remote and local branch in git


вы также можете использовать следующее Для удаления удаленной ветви.

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: [email protected]/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>

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

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

просто сказать:

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

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

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

  1. нажмите на проект, содержащий филиала
  2. переключиться на ветку, которую вы хотите удалить switching branch
  3. в меню "филиал", "выбор", "отменить публикацию...", чтобы ветвь была удалена с серверов GitHub. unpublish branch
  4. в меню "филиал", "выбор", "удалить". "branch_name"...', чтобы ветвь была удалена с вашей локальной машины (она же машина, над которой вы сейчас работаете) delete local branch

удалить локально (нормальный),

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.

Графическое Представление,

enter image description here


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 '[email protected]: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