Как удалить ветку 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   14084   2010-01-05 04:12:15

30 ответов:

Резюме

$ git push --delete <remote_name> <branch_name>
$ git branch -d <branch_name>

обратите внимание, что в большинстве случаев удаленные имя origin.

Удалить Локальную Ветку

удалить местные ветка используйте один из следующих способов:

$ git branch -d branch_name
$ git branch -D branch_name

Примечание: The псевдоним --delete, который удаляет ветвь только в том случае, если она уже была полностью объединена в своей восходящей ветви. Вы также можете использовать -D, что является псевдонимом для --delete --force, которым удаляет ветку " независимо от ее объединенного статуса."[Источник: man git-branch]

удалить удаленную ветку [Обновлено 8-Sep-2017]

по состоянию на ГИТ В1.7.0, вы можете удалить remote через филиал

$ git push <remote_name> --delete <branch_name>

что может быть легче запомнить, чем

$ git push <remote_name> :<branch_name>

, который был добавлен в ГИТ В1.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 и это сработало прекрасно. Скотт Чакон был прав-я хочу собака уха эта страница (или практически собачье ухо, отвечая на это при переполнении стека).

тогда вы должны выполнить это на других машинах

git fetch --all --prune

для распространения изменений.

Мэтью отлично подходит для удаления remote ветви и я также ценю объяснение, но чтобы сделать простое различие между двумя командами:

удалить местного отделения из машины:

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

обрезка устаревшей локальной ветви удаленного отслеживания происхождения/х

если вы не удалили свою удаленную ветку 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 возможность удаления удаленного отслеживания ветки, которые стали черствыми. это делает "удаленное обновление ГИТ" и "мерзавец удаленный чернослив "менее необходим (нет плана по удалению" 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 до удалить только удаленную ветку добавить название ветки в конце, и это будет удалить и нажимаем удалить при этом время...

и 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).

чтобы удалить ветку локально и удаленно

  • Checkout to master branch -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>

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

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

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

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

теперь вы можете сделать это с GitHub Desktop приложение.

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

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

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

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.

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

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 '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

Теперь для очистки удаленных удаленных ветвей запустите

git remote prune origin

перед выполнением

git branch --delete <branch>

убедитесь, что вы сначала определяете точное имя удаленной ветви, выполнив:

git ls-remote

это скажет вам, что ввести именно для <branch> значение. (branch чувствителен к регистру!)

Mashup всех других ответов. Требуется Ruby 1.9.3+, проверено только на 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