it-swarm.com.ru

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

15539
Matthew Rankin

Управляющее резюме

$ git Push --delete <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. , вы можете удалить удаленную ветку с помощью

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

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

$ git Push <remote_name> :<branch_name>

который был добавлен в Git v1.5. "чтобы удалить удаленную ветку или тег".

Начиная с Git v2.8. вы также можете использовать 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, и он работал прекрасно. Скотт Чакон был прав - я захочу собачье ухо эту страницу (или практически собачье ухо, ответив на это в переполнении стека).

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

git fetch --all --Prune

распространять изменения.

19459
Matthew Rankin

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

Чтобы удалить локальную ветвь с вашего компьютера:

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

3061
Eric Brotto

Короткие ответы

Если вам нужны более подробные объяснения следующих команд, см. Подробные ответы в следующем разделе.

Удаление удаленной ветки:

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. Удаленная ветка Origin X.
  3. Локальная ветвь удаленного отслеживания Origin/X, которая отслеживает удаленную ветвь X.

Visualization of 3 branches

Оригинальный постер использовал

git branch -rd Origin/bugfix

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

Diagram 2

Чтобы удалить фактическую удаленную ветку , вам нужно

git Push Origin --delete bugfix

Diagram 3

Дополнительные детали

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

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

Обратите внимание, что удаление удаленной ветви X из командной строки с помощью git Push также приведет к удалению локальной ветви удаленного отслеживания Origin/X, поэтому нет необходимости удалять Prune устаревшая ветка удаленного отслеживания с 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 и --multipleoptions, чтобы запускать выборку из многих репозиториев, и --Prune возможность удалить удаленное отслеживание ветки, которые устарели. Они делают "git remote update" и "git remote Prune" менее необходимыми (однако, не планируется удалять ни "remote update", ни "remote Prune").

Альтернатива вышеупомянутому автоматическому сокращению для устаревших удаленных отслеживающих ветвей

Кроме того, вместо удаления устаревших локальных веток удаленного отслеживания с помощью git fetch -p, вы можете избежать выполнения дополнительной сетевой операции , просто удалив ветку (и) вручную с флагами --remote или -r :

git branch --delete --remotes Origin/X
git branch -dr Origin/X # Shorter

Смотрите также

1768
user456814

Шаги по удалению ветки:

Для удаления удаленной ветви:

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

1365
Alireza

Вы также можете использовать следующее, чтобы удалить удаленную ветку

git Push --delete Origin serverfix

Который делает то же самое, что и

git Push Origin :serverfix

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

757
pagetribe

Совет: при удалении веток с помощью

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.

362
pfrenssen

Если вы хотите удалить ветку, сначала оформите заказ на ветку, отличную от удаляемой ветви.

git checkout other_than_branch_to_be_deleted

Удаление местного филиала:

git branch -D branch_to_be_deleted

Удаление удаленной ветки:

git Push Origin --delete branch_to_be_deleted
360
Praveen Hiremath
git branch -D <name-of-branch>
git branch -D -r Origin/<name-of-branch>
git Push Origin :<name-of-branch>
260
Felipe

Это просто: просто запустите следующую команду:

Чтобы удалить ветку Git как локально, так и удаленно, сначала удалите локальную ветку, используя команду:

git branch -d example

(здесь example - название ветви)

И после этого удалите удаленную ветку командой:

git Push Origin :example
221
Syeful Islam

Другой подход:

git Push --Prune Origin

ПРЕДУПРЕЖДЕНИЕ: Это удалит все удаленные ветви, которые не существуют локально. Или более всесторонне,

git Push --mirror

эффективно сделает удаленный репозиторий похожим на локальную копию репозитория (локальные заголовки, удаленные и теги зеркально отображаются на удаленном).

194
imanuelcostigan

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

alias git-shoot="git Push Origin --delete"

Тогда вы можете позвонить:

git-shoot branchname
163
crizCraig

С января 2013 года GitHub включил Delete branch кнопка рядом с каждой веткой на странице "Филиалы".

Соответствующее сообщение в блоге: Создание и удаление веток

128
Nacho Coloma

Удалить локально:

Чтобы удалить локальную ветку, вы можете использовать:

git branch -d <branch_name> 

Чтобы принудительно удалить ветку, используйте -D вместо -d.

git branch -D <branch_name>

Удалить удаленно:

Есть два варианта:

git Push Origin :branchname  

git Push Origin --delete branchname 

Я бы предложил вам использовать 2-й способ, так как он более интуитивно понятен.

125
Rahul Gupta

Если вы хотите выполнить оба эти действия с помощью одной команды, вы можете создать для нее псевдоним, добавив следующий код в свой ~/.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'

NOTE: При использовании -d (строчная буква d) ветвь будет удалена, только если она была объединена. Чтобы принудительное удаление произошло, вам нужно использовать -D (заглавная буква D).

122
Ryan Kohn

Удалить вашу ветку локально и удаленно

  • Оформить заказ на главную ветку - git checkout master

  • Удалить вашу удаленную ветку - git Push Origin --delete <branch-name>

  • Удалить ваше местное отделение - git branch --delete <branch-name>

113
mfathy00

Вы также можете сделать это, используя git remote Prune Origin

$ git remote Prune Origin
Pruning Origin
URL: [email protected]/yourrepo.git
 * [pruned] Origin/some-branchs

Он удаляет и удаляет ветки удаленного отслеживания из списка git branch -r.

109
nickleefly

В дополнение к другим ответам я часто использую инструмент git_remote_branch . Это дополнительная установка, но она дает вам удобный способ взаимодействия с удаленными филиалами. В этом случае удалить:

grb delete branch

Я считаю, что я также довольно часто использую команды publish и track

104
u2622

одна строка команда delete как локальная, так и удаленная :

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"
93
Vinnie James

удаление веток

Предположим, что наша работа над веткой "contact-form" завершена, и мы уже интегрировали ее в "master". Так как он нам больше не нужен, мы можем удалить его (локально):

$ git branch -d contact-form

И для удаления удаленной ветки:

git Push Origin --delete contact-form
91
Ulysses Alves

Удалить удаленную ветку

git Push Origin :<branchname>

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

git branch -D <branchname>

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

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

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

git branch -d <branch-name>
git Push Origin :<branch-name>
85
piyushmandovra
git Push Origin --delete <branch Name>

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

git Push Origin :branchName
81
Smila

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

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

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

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

$ 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
65
Amiramix

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

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

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

function gitdelete(){
    git Push Origin --delete $1
    git branch -D $1
}

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

gitdelete my-branch-name

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

49
arthurakay

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

git branch --delete <branch>

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

git ls-remote

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

45
joey
git Push Origin :bugfix  # Deletes remote branch
git branch -d bugfix     # Must delete local branch manually

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

git branch -D bugfix

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

git remote Prune Origin
44
user

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

Я добавил следующие псевдонимы в свой файл .gitconfig. Это позволяет мне удалять ветви с указанием или без указания имени ветви. Имя ветви по умолчанию соответствует текущей ветви, если аргумент не передан.

[alias]
    branch-name = rev-parse --abbrev-ref HEAD     

    rm-remote-branch = !"f() { branch=${1-$(git branch-name)}; git Push Origin :$branch; }; f"
    rm-local-branch = !"f() { branch=${1-$(git branch-name)}; git checkout master; git branch -d $branch; }; f"
    rm-branch-fully = !"f() { branch=${1-$(git branch-name)}; git rm-local-branch $branch; git rm-remote-branch $branch; }; f"
39
Jared Knipp

Альтернативным вариантом командной строки для удаления удаленных веток является страница веток GitHub .

См. Например: https://github.com/angular/angular.js/branches

Находится на странице Code -> Branches репозитория GitHub.

Я обычно предпочитаю командную строку сам, но на этой странице GitHub вы найдете гораздо больше информации о ветвях, таких как последнее обновление дата и пользователь и количество коммитов впереди и сзади . Это полезно при работе с большим количеством веток.

32
Bradley Flood

У меня также были подобные проблемы, и это, кажется, работает: Это удаляет локальную ветвь. git branch -d the_local_branch

Это удаляет удаленную ветку git Push Origin :the_remote_branch

Источник: Макандра Кардс

30
Srijan Karki

Есть хороший ответ, но в случае, если у вас есть тонна веток, удаление их одно за другим локально и удаленно, было бы утомительным занятием. Вы можете использовать этот скрипт для автоматизации этих задач.

branch_not_delete=( "master" "develop" "our-branch-1" "our-branch-2")


for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master`; do

    # delete prefix remotes/Origin/ from branch name
    branch_name="$(awk '{gsub("remotes/Origin/", "");print}' <<< $branch)"

    if ! [[ " ${branch_not_delete[*]} " == *" $branch_name "* ]]; then
        # delete branch remotly and locally
        git Push Origin :$branch_name
    fi
done 
  • Перечислите ветки, которые вы не хотите удалять
  • Выполните итерацию по удаленной ветке, и если их нет в нашем "списке сохранения", мы удалили.

Источник: удаление-git-ветки-в-один раз

28
levi

Используя GitBash вы можете выполнить следующее:

git branch --delete <branch>

OR

В настольном приложении GitHub, когда вы отметили ветку, вы можете удалить локальную ветку через ветвь полоса меню:

enter image description here

Если вы НЕ используете настольное приложение GitHub и используете IDE как Visual Studio для локального контроля исходного кода, все, что вам нужно нужно сделать пару быстрых шагов:

  1. Проверьте ветку, отличную от той, которую вы хотите удалить.
  2. Щелкните правой кнопкой мыши ветку, которую хотите удалить.
  3. Выберите Удалить в контекстном меню.

Затем, войдя в свою учетную запись GitHub через Интернет, перейдите в хранилище и нажмите Все ветви вкладка. Оттуда, просто нажмите на маленькую иконку мусорной корзины справа на названии брахи, которую вы хотите удалить.

enter image description here

* Имейте в виду - если ветка не опубликована, нет необходимости пытаться удалить ее из своего онлайн-хранилища.

23
Uchiha Itachi

Я создал следующую удобную функцию в моем файле .bash_aliases:

git-delete-branch() 
{ 
    if [[ -n $1 ]]; then
        git checkout master > /dev/null;
        branch_name="$1";
        echo "Deleting local $branch_name branch...";
        git branch -D "$branch_name";
        echo "Deleting remote $branch_name branch...";
        git Push Origin --delete "$branch_name";
        git remote Prune Origin;
        echo "Your current branches are:";
        git branch -a;
    else
        echo "Usage: git-delete-branch <branch_name>";
    fi
}
19
Vagelis Prokopiou

Согласно последнему документу, используя терминал, мы можем удалить следующим образом.

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

git branch -D usermanagement

удалить в удаленном месте:

git Push --delete Origin usermanagement
19
KARTHIKEYAN.A

Это очень просто

удалить удаленную ветку

git Push -d Origin <branch-name>

OR

git Push Origin :<branch-name>

удалить локальную ветку

git branch -D <branch-name>
17
Vivek Maru