Как удалить ветку Git локально и удаленно? - PullRequest
15427 голосов
/ 05 января 2010

Я хочу удалить ветку как локально, так и удаленно.

Неудачные попытки удалить удаленную ветвь

$ 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 филиал как локально, так и удаленно?

Ответы [ 38 ]

85 голосов
/ 23 апреля 2015

Просто скажите:

git branch -d <branch-name>
git push origin :<branch-name>
81 голосов
/ 02 мая 2015
git push origin --delete <branch Name>

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

git push origin :branchName
79 голосов
/ 22 октября 2015

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

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

  1. Нажмите на проект, содержащий ветку
  2. Переключиться на ветку, которую вы хотите удалить switching branch
  3. В меню «Ветка» выберите «Отменить публикацию ...», чтобы удалить ветку с серверов GitHub. unpublish branch
  4. В меню «Филиал» выберите «Удалить» имя_ ветви «...», чтобы удалить ветку с вашего локального компьютера (или компьютера, на котором вы сейчас работаете) delete local branch
73 голосов
/ 23 июня 2017

Удалить локально - (Нормально),

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

65 голосов
/ 29 июля 2014

Это не будет работать, если у вас есть тег с тем же именем, что и у ветви на пульте:

$ 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
51 голосов
/ 27 ноября 2013

Многие другие ответы приведут к ошибкам / предупреждениям. Этот подход является относительно надежным, хотя вам может потребоваться 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
49 голосов
/ 10 февраля 2016

Мне надоело искать этот ответ, поэтому я выбрал аналогичный подход на ответ, который CrizCraig разместил ранее.

Добавлено следующее в мой профиль Bash:

function gitdelete(){
    git push origin --delete $1
    git branch -D $1
}

Затем каждый раз, когда я заканчиваю ветку (например, объединенную в master), я запускаю в своем терминале следующее:

gitdelete my-branch-name

... который затем удаляет my-branch-name из origin, а также локально.

45 голосов
/ 21 мая 2016

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

git branch --delete <branch>

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

git ls-remote

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

44 голосов
/ 21 апреля 2016
git push origin :bugfix  # Deletes remote branch
git branch -d bugfix     # Must delete local branch manually

Если вы уверены, что хотите удалить его, запустите

git branch -D bugfix

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

git remote prune origin
43 голосов
/ 20 ноября 2013

Мешап из всех других ответов. Требуется 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
...