Как удалить ветвь Git как локально, так и удаленно?

Я хочу удалить ветвь как локально, так и в моей удаленной проектной вилке на 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?

Вам также может понравиться

About the Author: qw

30 комментариев

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

    $ 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-Sep-2017]

    С Git v1.7.0 вы можете удалить удаленную ветку, используя

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

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

    $ git push <remote_name> :<branch_name>
    

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



    Начиная с Git v2.8.0 вы также можете использовать git push с -d в качестве псевдонима для --delete.

    Поэтому версия Git, которую вы установили, будет определять, нужно ли вам использовать более простой или сложный синтаксис.

    Удалить удаленную ветвь [Исходный ответ от 5 января 2010 года]

    Из главы 3 Pro Git Скотта Чакона:

    Удаление удаленных веток

    Предположим, что вы сделали с удаленной веткой — скажем, вы и ваши сотрудники закончили с функцией и объединили ее в свою ветвь master remotes (или любую ветвь вашей стабильной кодовой линии). Вы можете удалить удаленную ветку с помощью довольно тупого синтаксиса git push [remotename] :[branch]. Если вы хотите удалить ветвь serverfix с сервера, вы запустите следующее:

    $ git push origin :serverfix
    To git@github.com:schacon/simplegit.git
     - [deleted]         serverfix
    

    Boom. На вашем сервере больше нет ветки. Вы можете захотеть получить эту страницу, потому что вам понадобится эта команда, и вы, вероятно, забудете синтаксис. Способ запоминания этой команды — это напоминание о синтаксисе git push [remotename] [localbranch]:[remotebranch] который мы перешли немного раньше. Если вы оставите часть [localbranch], тогда вы, в основном, говорите: "Не принимайте на моей стороне и делайте это [remotebranch] ".

    Я выпустил git push origin :bugfix и он работал красиво. Скотт Чакон был прав — я хочу, чтобы собака ухала эту страницу (или фактически уха собаки, ответив на это в переполнении стека).

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

    git fetch --all --prune
    

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

  2. Ответ Matthew отлично подходит для удаления удаленных ветвей, и я также благодарен за объяснение, но для простого различия между двумя командами:

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

    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

  3. Краткие ответы

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

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

    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 разных ветки:

    • Локальная ветвь X.
    • Удаленная ветвь происхождения X.
    • Локальная ветвь удаленного отслеживания 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, поэтому нет необходимости обрезать устаревшее ветвь удаленного отслеживания с 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

    Если вы не удалили удаленную ветвь 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 для удаления удаленного отслеживания ветки, которые стали устаревшими. Они делают "git удаленное обновление" и "gitудаленная чернослив" меньше необходимости (нет плана для удаления "удаленных обновление" или "удаленная обрезка" ).

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

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

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

    См. также

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

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

    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 ошибку, соответствующую статусу слияния ветки…

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

    delete a remote and local branch in git

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

    git push --delete origin serverfix
    

    Что делает то же самое, что

    git push origin :serverfix
    

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

  6. Если вы хотите удалить ветвь, сначала выйдите в ветку, отличную от ветки, которую нужно удалить.

    git checkout other_than_branch_to_be_deleted
    

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

    git branch -D branch_to_be_deleted
    

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

    git push origin --delete branch_to_be_deleted
    

  7. Совет. Когда вы удаляете ветки с помощью

    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.

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

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

    git branch -d example
    

    (здесь example — имя ветки)

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

    git push origin :example
    

  9. Другой подход —

    git push --prune origin
    

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

    git push --mirror
    

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

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

    ПРИМЕЧАНИЕ. При использовании -d (нижний регистр d) ветвь будет удалена только в том случае, если она была объединена. Чтобы принудительно выполнить удаление, вам нужно будет использовать -d (в верхнем регистре D).

  11. Чтобы удалить филиал локально и удаленно

    • Оформить покупку в ветке — git checkout master

    • Удалите удаленную ветку — git push origin --delete <branch-name>

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

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

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

    git branch -d branch_name 
    

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

    git branch -D branch_name
    

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

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

    git push origin :branchname  
    
    git push origin --delete branchname 
    

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

  13. Вы также можете сделать это, используя git remote prune origin:

    $ git remote prune origin
    Pruning origin
    URL: git@example.com/yourrepo.git
     * [pruned] origin/some-branchs
    

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

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

    grb delete branch
    

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

  15. Удаление ветвей

    Предположим, что наша работа над веткой "контакт-форма" выполнена, и мы уже интегрировали ее в "мастер". Поскольку нам это больше не нужно, мы можем удалить его (локально):

    $ git branch -d contact-form
    

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

    git push origin --delete contact-form
    

  16. Одна команда liner удаляет как локальные, так и удаленные:

    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"
    

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

    git push origin :<branchname>

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

    git branch -D <branchname>

    Удалить шаги локального перехода:

    • проверка на другую ветку
    • удалить локальную ветвь
  18. Теперь вы можете сделать это с помощью приложения GitHub Desktop.

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

    • Нажмите проект, содержащий ветку
    • Перейдите к ветке, которую вы хотите удалить ветвь переключения
    • В меню "Отладка" выберите "Отменить публикацию…", чтобы ветвь удалилась с серверов GitHub. unublish branch
    • В меню "Ветка" выберите "Удалить" имя_каталога "…", чтобы ветвь удалилась с вашего локального компьютера (ака машина, над которой вы сейчас работаете) удалить локальную ветвь
  19. Чтобы удалить локально — (Обычный),

    git branch -d my_branch
    

    Если ваша ветка в процессе восстановления/слияния и что это не было сделано правильно, вы получите сообщение об ошибке Rebase/Merge in progress, поэтому в этом случае вы не сможете удалить свою ветку.

    Таким образом, либо ваша необходимость разрешать переполнение/слияние в противном случае вы можете принудительно удалить, используя

    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.
    

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

    введите описание изображения здесь

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

    $ 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
    

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

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

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

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

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

    gitdelete my-branch-name
    

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

  23. git push origin :bugfix  # Deletes remote branch
    git branch -d bugfix     # Must delete local branch manually
    

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

    git branch -D bugfix
    

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

    git remote prune origin
    

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

    git branch --delete <branch>
    

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

    git ls-remote
    

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

  25. Mashup всех остальных ответов. Требуется 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
    

Добавить комментарий для Amiramix Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *