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

avatar
Matthew Rankin
5 января 2010 в 01:12
9033878
41
18245

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

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

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

Источник
Robert Harvey
11 июня 2014 в 16:10
1261

Примечание модератора: если вы собираетесь ответить на этот вопрос, обратите внимание, что уже опубликовано 40 ответов. Будет ли ваш новый ответ иметь какое-либо существенное значение?

VonC
25 мая 2015 в 14:57
64

Примечание: для Git 2.5+ (второй квартал 2015 г.) точное сообщение будет « deleted remote-tracking branch »: см. github.com/git/git/commit/…

Mig
12 сентября 2019 в 10:11
0

Возможно, вас заинтересует этот сценарий, который упрощает разницу между удалением локальной и удаленной веток: tlbx.app/blog/delete-any-git-branch-the-easy-way

Adam
28 ноября 2019 в 18:57
0

@RobertHarvey сейчас всего 39

Robert Harvey
30 ноября 2019 в 15:21
0

@Adam: 81. 42 ответа были удалены по разным причинам. Необъяснимая одержимость публики определенной темой - одна из величайших загадок жизни.

Gabriel Staples
3 апреля 2020 в 20:37
12

Пропустите несколько первых ответов и просто перейдите к самому лучшему: coderhelper.com/a/23961231/4561887. Чтобы удалить ветку git, нужно удалить 3 разных ветки! Этот ответ проясняет этот факт.

Nathan
19 июня 2020 в 04:32
2

@GabrielStaples Без контекста ваш комментарий сбивает с толку. Неправильны ли как-то «лучшие» ответы?

Gabriel Staples
18 ноября 2020 в 23:06
4

@ Натан, нет, они не ошибаются, но они не учат тому, что вы не знаете, чего не знаете , тогда как тот, на который я ссылаюсь, делает это критически важным неизвестное неизвестное становится известным неизвестным , а затем известным известным . Я не знал, что у вас есть 1) локальная ветка, 2) локально хранимая ветка удаленного отслеживания и 3) удаленная ветка , пока я не прочитал этот ответ. До этого я думал, что есть только локальная ветка и удаленная ветка . Локально сохраненная ветвь удаленного отслеживания была unknown unknown . Переход от этого к известному известному - вот что делает этот ответ лучшим.

cRAN
9 февраля 2021 в 14:28
0

Я хотел добавить примечание, что нельзя удалить ветку, над которой сейчас работаете. Я сделал эту ошибку новичка, поэтому подумал, может ли это помочь. :)

Panzercrisis
26 мая 2021 в 00:41
0

Обычное примечание пользователя: если вы намерены проголосовать за комментарий Роберта Харви, обратите внимание, что уже добавлено 1215 голосов. Принесет ли ваш новый голос какой-нибудь существенный вклад? :) ... Сейчас 1216! Это лот .

RBT
4 июня 2021 в 13:09
0

Очень хороший блог на freecodecamp

Ответы (41)

avatar
Matthew Rankin
5 января 2010 в 01:13
22894

Краткое содержание

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

Обратите внимание, что в большинстве случаев удаленное имя - origin. В таком случае вам нужно будет использовать такую ​​команду.

$ git push -d origin <branch_name>

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

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

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

Примечание: Параметр -d является псевдонимом для --delete, который удаляет ветвь, только если она уже была полностью объединена с восходящей ветвью. Вы также можете использовать -D, который является псевдонимом для --delete --force, который удаляет ветку «независимо от ее объединенного статуса». [Источник: man git-branch]
Также обратите внимание, что git branch -d branch_name завершится ошибкой, если вы сейчас в ветке, которую хотите удалить. Сообщение начинается с error: Cannot delete the branch 'branch_name'. Если это так, сначала переключите в другую ветку, например: git checkout main.

Удалить удаленную ветвь [Обновлено 8 сентября 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 Скотта Чакона:

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

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

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

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

Я выдал git push origin: bugfix, и это прекрасно сработало. Скотт Чакон был прав - я хочу собачьего уха этой страницы (или практически собачьего уха, отвечая на этот вопрос в Stack Overflow).

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

# Fetch changes from all remotes and locally delete 
# remote deleted branches/tags etc
# --prune will do the job :-;
git fetch --all --prune

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

Trevor Boyd Smith
27 мая 2015 в 16:51
417

Не забудьте выполнить git fetch --all --prune на других машинах после удаления удаленной ветви на сервере. ||| После удаления локальной ветви с git branch -d и удаления удаленной ветви с git push origin --delete другие машины могут все еще иметь «устаревшие ветви отслеживания» (чтобы увидеть, как они делают git branch -a). Чтобы избавиться от них, выполните git fetch --all --prune.

Sandra
9 сентября 2015 в 09:53
15

в дополнение к git branch -a @ TrevorBoydSmith для просмотра всех веток, вы также можете использовать git branch -r для просмотра только удаленных ветвей. см. также git remote show origin - источник: gitready.com/intermediate/2009/02/13/list-remote-branches.html

Kellen Stuart
10 марта 2016 в 01:32
20

Мне пришлось запустить git branch -D Branch_Name, чтобы избавиться от локальной ветки

BTRUE
5 апреля 2016 в 16:27
12

@KolobCanyon Вам нужно использовать -D только в том случае, если ветка не была объединена с другой веткой.

jww
7 июня 2016 в 02:15
4

Был задан вопрос: «Что мне нужно сделать по-другому, чтобы успешно удалить ветку remotes / origin / bugfix как локально, так и на GitHub?» После выполнения команд в обновленном ответе местное отделение все еще присутствует. Было бы неплохо, если бы принятый ответ был полным ответом. Совершенно удивительно, насколько сложно Git выполняет простые задачи ...

Alex
16 августа 2017 в 14:27
0

Чтобы лучше понять синтаксис git push origin: <branch_name>, перейдите на coderhelper.com/questions/1519006/…

Sheldon
24 августа 2017 в 12:13
0

Обратите внимание, что -d как псевдоним для --delete также работает с push-вызовом. Так что git push origin -d <branch_name> тоже работает

Alex78191
19 сентября 2017 в 00:46
0

Почему мне нужно указывать удаленный при нажатии?

Philip Rego
26 октября 2017 в 20:38
0

@ Alex78191 Потому что вы, возможно, не захотите подталкивать свою ветку ко всем своим пультам. Однако я использую этот псевдоним, когда хочу отправить всю свою ветку на все свои пульты. coderhelper.com/a/18674313/1308453

luator
1 декабря 2017 в 14:57
0

@Sheldon Какую версию git вы используете? Для меня (git 2.7.4) -d не работает для push.

Sheldon
1 декабря 2017 в 16:53
0

@luator Я использую 2.8.1, и приношу свои извинения, -d в качестве псевдонима для --delete был добавлен в 2.8.0, см. здесь: legacy-developer.atlassian.com/blog/2016/03/ …

user1101733
22 февраля 2018 в 14:42
0

Вы также можете использовать инструмент дерева исходных текстов, если не хотите запоминать команды git.

Christophe Roussy
22 мая 2018 в 14:44
0

У меня работал только $ git push <remote_name> :<branch_name>.

Alois Mahdal
9 июля 2018 в 21:52
0

--delete может быть легче запомнить, но уже слишком поздно, если вы уже понимаете push remote :deadbr, плюс в последнем есть то, что он работает и для тегов.

Caltor
29 ноября 2018 в 11:28
1

В резюме у вас есть git push --delete <remote_name> <branch_name>, но в первом разделе «Удалить обновление удаленной ветки» у вас есть git push <remote_name> --delete <branch_name>. т.е. параметры находятся в другом порядке. Могу я предложить сделать их такими же, чтобы избежать путаницы.

Daniel Springer
27 декабря 2018 в 15:28
0

Я запустил первую строку резюме, а вторая не «нужна» (?). Филиал пропал как локально, так и удаленно.

Timmmm
24 января 2019 в 17:01
0

@DanielSpringer Такого быть не должно. Он удалит удаленную ветку origin/mybranch в вашем репо и на сервере, но не удалит локальные ветки отслеживания (mybranch).

Daniel Springer
24 января 2019 в 17:17
0

@Timmmm либо я запускал его раньше и забыл, либо ... не знаю: P

stwr667
14 февраля 2019 в 08:08
0

Обратите внимание, что это может не сработать с ! [remote rejected] <branch_name> (refusing to delete the current branch: refs/heads/<branch_name>) error: failed to push some refs to 'git@github.com:<org_name>/<project_name>.git', если вы установили эту ветку в Github в качестве ветки по умолчанию. Если да, перейдите в свой проект в Github -> «Настройки» -> «Филиалы», а затем измените ветку по умолчанию на другую. Тогда повторение вашей команды для удаления ветки будет работать.

Robin A. Meade
20 сентября 2019 в 20:45
0

В этом ответе показано, как удалить ветку на конкретном пульте дистанционного управления. Для единообразия шаг сокращения также должен быть ограничен этим конкретным пультом дистанционного управления. Отбросьте параметр --all и укажите удаленный: git fetch --prune <remote_name>.

Andy Macleod
6 мая 2020 в 10:45
0

Это можно передать в другие команды, такие как grep, чтобы отфильтровать ветки, которые вы не хотите удалять git branch --merged | grep -v "\$BRANCHNAME\b" | xargs git branch -d

Timo
21 ноября 2020 в 10:50
0

Я просто хотел удалить запись из списка git remote -v (я исправляю: 2 записи, а именно восходящие) и наткнулся на этот пост. Что ж, мое решение - удалить удаленную ветку из .git/config редактирования этого файла. Я добавил их случайно с помощью git remote add ..

Dror Bar
28 января 2021 в 14:00
0

Если репозиторий удален, и вам нужно удалить локальную ветвь, отслеживающую удаленную ветку, используйте git branch -d -r <remote>/<branch>

a.ak
2 марта 2021 в 13:06
0

Нужно ли отправлять изменения после удаления удаленной ветки?

avatar
imaginair
30 августа 2021 в 13:26
3

Здесь вы можете удалить удаленные ветки, соответствующие глобусу или любому имени ветки:

git branch -r --list "origin/*" | xargs git branch -r -D
avatar
sachyy
4 июня 2021 в 10:28
6

Первые несколько методов у меня не сработали,

Допустим, у вас есть следующая ветка и удаленная ветка,

Local  : Test_Branch
Remote : remotes/origin/feature/Test_FE

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

git branch --set-upstream-to=remotes/origin/feature/Test_FE Test_Branch

Затем, чтобы удалить удаленную ветку, выполните это

git push origin --delete Test_Branch

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

git branch -D Test_Branch

Вот и все. Ура.

Andras Deak
4 июня 2021 в 11:11
0

Неужели git push <remote_name> :<branch_name> действительно не работает? В вашем случае git push origin :Test_FE. Это указано в принятом ответе, получившем наибольшее количество голосов, который был опубликован 11 лет назад.

Andras Deak
4 июня 2021 в 14:25
0

Извините, вероятно, это должно было быть :feature/Test_FE.

sachyy
9 июня 2021 в 11:20
0

да. может быть из-за каталогов не получилось. При правильном названии все должно работать, так как я вижу количество положительных голосов. Но я думал поделиться тем, что узнал. Спасибо

avatar
Eugene Yarmash
3 сентября 2019 в 13:23
12

Самый гибкий способ - использовать настраиваемую команду Git. Например, создайте следующий сценарий Python где-нибудь в вашем $PATH под именем git-rmbranch и сделайте его исполняемым:

#!/usr/bin/env python3

import argparse
import subprocess
import sys

def rmbranch(branch_name, remote, force):
    try:
        print(subprocess.run(['git', 'branch', '-D' if force else '-d', branch_name],
                             capture_output=True, check=True, encoding='utf-8').stdout, end='')
    except subprocess.CalledProcessError as exc:
        print(exc.stderr.replace(f'git branch -D {branch_name}', f'git rmbranch -f {branch_name}'), end='')
        return exc.returncode

    return subprocess.run(['git', 'push', remote, '--delete', branch_name]).returncode    

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Delete a Git branch locally and remotely.')
    parser.add_argument('-r', '--remote', default='origin', help="The remote name (defaults to 'origin')")
    parser.add_argument('-f', '--force', action='store_true', help='Force deletion of not fully merged branches')
    parser.add_argument('branch_name', help='The branch name')
    args = parser.parse_args()

    sys.exit(rmbranch(args.branch_name, args.remote, args.force))

Затем git rmbranch -h покажет вам информацию об использовании:

usage: git-rmbranch [-h] [-r REMOTE] [-f] branch_name

Delete a Git branch locally and remotely.

positional arguments:
  branch_name           The branch name

optional arguments:
  -h, --help            show this help message and exit
  -r REMOTE, --remote REMOTE
                        The remote name (defaults to 'origin')
  -f, --force           Force deletion of not fully merged branches

Обратите внимание, что git push origin --delete <branch_name> также удаляет локальную ветвь удаленного отслеживания (по умолчанию origin/<branch_name>), поэтому об этом не нужно заботиться.

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

Mogens TrasherDK
2 января 2020 в 03:19
0

Установка Python для чего-то git работает сама по себе, на самом деле это не решение. Больше похоже на упражнение по программированию.

Eugene Yarmash
2 января 2020 в 11:24
3

@Mogens Python уже предустановлен в большинстве нормальных дистрибутивов. Только с git вы не можете, например: 1) настроить вывод (например, сделать его более согласованным) 2) объединить несколько команд желаемым образом 3) легко настроить логику. Кроме того, вводить одни и те же команды снова и снова довольно скучно.

avatar
ShawnFeatherly
18 февраля 2019 в 20:24
6

Ответы CoolAJ86 и apenwarr очень похожи. Я ходил туда-сюда, пытаясь понять лучший подход для поддержки замены подмодуля. Ниже представлена ​​их комбинация.

Сначала перейдите Git Bash в корень репозитория Git, который нужно разделить. В моем примере это ~/Documents/OriginalRepo (master)

# Move the folder at prefix to a new branch
git subtree split --prefix=SubFolderName/FolderToBeNewRepo --branch=to-be-new-repo

# Create a new repository out of the newly made branch
mkdir ~/Documents/NewRepo
pushd ~/Documents/NewRepo
git init
git pull ~/Documents/OriginalRepo to-be-new-repo

# Upload the new repository to a place that should be referenced for submodules
git remote add origin git@github.com:myUsername/newRepo.git
git push -u origin master
popd

# Replace the folder with a submodule
git rm -rf ./SubFolderName/FolderToBeNewRepo
git submodule add git@github.com:myUsername/newRepo.git SubFolderName/FolderToBeNewRepo
git branch --delete --force to-be-new-repo

Ниже приведена копия вышеизложенного с замененными настраиваемыми именами и использованием вместо этого HTTPS. Теперь корневая папка ~/Documents/_Shawn/UnityProjects/SoProject (master)

# Move the folder at prefix to a new branch
git subtree split --prefix=Assets/SoArchitecture --branch=so-package

# Create a new repository out of the newly made branch
mkdir ~/Documents/_Shawn/UnityProjects/SoArchitecture
pushd ~/Documents/_Shawn/UnityProjects/SoArchitecture
git init
git pull ~/Documents/_Shawn/UnityProjects/SoProject so-package

# Upload the new repository to a place that should be referenced for submodules
git remote add origin https://github.com/Feddas/SoArchitecture.git
git push -u origin master
popd

# Replace the folder with a submodule
git rm -rf ./Assets/SoArchitecture
git submodule add https://github.com/Feddas/SoArchitecture.git
git branch --delete --force so-package
avatar
Vivek Maru
7 декабря 2017 в 13:29
380

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

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

git push -d origin <branch-name>

или

git push origin :<branch-name>

- Вы также можете удалить теги с этим синтаксисом

Чтобы принудительно удалить локальную ветвь

git branch -D <branch-name>

Примечание: выполните git fetch --all --prune на других машинах после удаления удаленной ветви, чтобы удалить устаревшие ветви отслеживания.

Пример

для удаления местного отделения

git branch -D my-local-branch

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

git push origin :my-remote-branch

Счастливого кодирования :)

ZakJ
10 декабря 2017 в 23:22
9

Мне нужно было использовать --delete вместо -d для удаления удаленной ветки.

Vivek Maru
18 декабря 2017 в 09:48
3

Параметр -d является псевдонимом для --delete, и если --delete работает, то -d также должен работать, если вы принудительно хотите удалить ветку, вы можете использовать -D вместо -d или --delete.

avatar
KARTHIKEYAN.A
23 октября 2017 в 11:23
53

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

Удалить на локальном уровне:

git branch -D usermanagement

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

git push --delete origin usermanagement
Honghao Zhang
1 декабря 2020 в 09:18
2

Я действительно не понимаю, почему команда git такая непоследовательная и неинтуитивная для запоминания. Смотрит на удаление, один - -D, другой - -d|--delete

Yahya
2 февраля 2021 в 22:56
2

Это единственное решение, которое сработало для меня +1.

avatar
Vagelis Prokopiou
25 сентября 2017 в 19:20
20

Я создал следующую удобную функцию в моем файле .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
}
avatar
Alireza
27 июня 2017 в 13:13
1614

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

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

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

LoranceChen
27 июля 2017 в 03:01
55

git branch -a отобразит локальные и удаленные ветви. Это поможет вам представить диаграмму.

BaDr Amer
28 мая 2018 в 08:43
5

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

vibs2006
8 мая 2019 в 06:33
0

Когда ветки удаляются в источнике, ваш локальный репозиторий не заметит этого. У вас по-прежнему будут локально кэшированные версии этих веток (что на самом деле хорошо), но git branch -a по-прежнему будет перечислять их как удаленные ветки. Вы можете очистить эту информацию локально следующим образом: git remote prune origin Ваши локальные копии удаленных веток этим не удаляются. Тот же эффект достигается при использовании git fetch --prune

jmiserez
6 сентября 2019 в 10:31
11

Изображение отвлекающее, очень большое и ничего не добавляет к ответу. Надеюсь, это не станет трендом на SO.

avatar
Mohideen bin Mohammed
23 июня 2017 в 06:42
88

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

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

avatar
Jared Knipp
22 февраля 2017 в 17:20
41

Я добавил следующие псевдонимы в свой файл .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"
Alwin Kesler
4 марта 2017 в 11:41
6

Будьте осторожны с опцией de -D. В партии рассмотрите возможность использования нижнего -d

Jared Knipp
5 марта 2017 в 05:45
0

В моем случае я почти всегда удаляю после слияния (или без слияния). Использование нижнего -d потребует, чтобы ветвь была объединена перед удалением, использование -D принудительно удаляет ветку.

avatar
Uchiha Itachi
12 февраля 2017 в 21:25
28

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

git branch --delete <branch>

Или

-

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

Enter image description here

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

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

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

Enter image description here

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

RBT
1 августа 2017 в 09:00
0

Я не вижу вкладок Overview, Yours, Active, State и All branches на веб-сайте GitHub. Похоже, это старый снимок. На вкладке Code я вижу вложенные вкладки, такие как коммиты, ветки, выпуски и участники. Когда я являюсь владельцем репозитория, я вижу дополнительную вкладку под названием MIT.

Sheldon
24 августа 2017 в 12:15
0

git branch --delete <branch> не удаляет удаленную ветку, для этого вам понадобится git push <server> --delete <branch>

avatar
Vinnie James
17 ноября 2016 в 01:03
106

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

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"
caesarsol
13 марта 2017 в 14:05
20

⚠️ Используйте git branch -D в сценарии осторожно, поскольку он принудительно удаляет ветку без проверки того, что она была объединена. Используйте -d на всякий случай.

avatar
levi
4 августа 2016 в 20:15
32

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

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

Jean-François Fabre♦
7 декабря 2020 в 12:18
1

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

avatar
jbooker
20 мая 2016 в 21:42
54

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

git branch --delete <branch>

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

git ls-remote

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

avatar
user
21 апреля 2016 в 16:49
53

Использование:

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

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

git branch -D bugfix

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

git remote prune origin
avatar
arthurakay
10 февраля 2016 в 19:47
56

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

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

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

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

gitdelete my-branch-name

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

kunl
27 июня 2016 в 13:15
7

расширяя это, --delete "$@" и -D "$@" вместо $1 будут обрабатывать его для нескольких ветвей.

bryn
19 июля 2016 в 14:17
5

Я предлагаю сначала запустить git branch -d (со строчной буквой d), чтобы убедиться, что изменения были объединены, а затем нажмите в случае успеха (поместите && между командами)

avatar
Bradley Flood
4 февраля 2016 в 23:34
35

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

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

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

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

avatar
mfathy00
3 января 2016 в 21:08
122

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

  • Касса до главного филиала - git checkout master

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

  • Удалите местный филиал - git branch --delete <branch-name>

avatar
jayxhj
31 декабря 2015 в 09:22
91

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

git push origin :<branchname>

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

git branch -D <branchname>

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

  1. оформить заказ в другой филиал
  2. удалить локальную ветвь
Samitha Chathuranga
17 февраля 2016 в 08:32
3

Требуется ли после удаления удаленной ветки "git push"?

Michał Szajbe
9 июня 2017 в 22:20
1

@SamithaChathuranga no, git push origin :<branchname> уже подталкивает 'пустую' ветку к удаленному (следовательно, удаляет удаленную ветку)

avatar
Ulysses Alves
30 октября 2015 в 12:39
98

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

Предположим, наша работа над веткой «контактная форма» завершена и мы уже интегрировали ее в «master». Поскольку он нам больше не нужен, мы можем удалить его (локально):

$ git branch -d contact-form

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

git push origin --delete contact-form
avatar
Eric
22 октября 2015 в 07:38
86

Теперь это можно сделать с помощью приложения GitHub Desktop.

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

  1. Щелкните проект, содержащий ветку
  2. Переключитесь на ветку, которую хотите удалить

    Switching branch

  3. В меню «Ветвь» выберите «Отменить публикацию ...», чтобы удалить ветку с серверов GitHub.

    Unpublish branch

  4. В меню «Ветвь» выберите «Удалить» имя_ ветки «...», чтобы ветка была удалена с вашего локального компьютера (он же машина, на которой вы сейчас работаете)

    Delete local branch

Daemedeor
6 ноября 2015 в 11:51
15

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

Eric
6 ноября 2015 в 16:00
12

@Daemedeor, я не согласен. В 2010 году, когда OP задал вопрос, пользовательского интерфейса не существовало, и единственным вариантом была командная строка. Чтобы указать, что вам нужен параметр только для командной строки, он должен быть указан в вопросе или с тегом интерфейс командной строки, которого в данном случае нет.

vezenkov
25 марта 2016 в 21:59
3

Команда git для удаления удаленной ветки - отстой, и я часто ее забываю (как новую, так и старую). К счастью, есть инструменты с графическим интерфейсом, у которых есть такая возможность. У Git Gui, TortoiseGit и GitHub Desktop есть это - я бы хотел, чтобы у Git Extensions тоже была эта функциональность. В любом случае, я помню, как запускать Git Gui из Git Extensions, когда мне нужно удалить удаленную ветку.

avatar
Rahul Gupta
23 мая 2015 в 08:56
141

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

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

git branch -d <branch_name>

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

git branch -D <branch_name>

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

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

git push origin :branchname

git push origin --delete branchname

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

avatar
Smila
2 мая 2015 в 10:59
87
git push origin --delete <branch Name>

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

git push origin :branchName
avatar
piyushmandovra
23 апреля 2015 в 18:06
90

Проще говоря:

git branch -d <branch-name>
git push origin :<branch-name>
Kermit_ice_tea
30 июня 2016 в 22:23
0

Это работает, если это ваша собственная ветка. Но если вы обрезаете все ненужные ветки в репо (некоторые из которых не ваши), этого будет недостаточно.

avatar
Syeful Islam
15 февраля 2015 в 15:20
234

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

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

git branch -d example

(Здесь example - название филиала.)

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

git push origin :example
avatar
Praveen Hiremath
7 октября 2014 в 13:52
376

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

git checkout other_than_branch_to_be_deleted

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

git branch -D branch_to_be_deleted

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

git push origin --delete branch_to_be_deleted
avatar
Greg
29 июля 2014 в 09:02
75

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

$ 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
user456814
29 июля 2014 в 10:00
1

Это нормально, но люди действительно не должны давать своим веткам и тегам одно и то же имя и одну и ту же схему именования.

Greg
30 июля 2014 в 11:59
3

Что ж, мой сценарий заключался в том, что я конвертировал ветку в тег, и было разумно, чтобы тег имел то же имя, что и ветка. Под преобразованием я подразумеваю слияние ветки B с A и пометку последней фиксации в ветке B тегом B, чтобы после удаления ветки B ее все еще можно было легко восстановить, просто проверив тег B.

Timo
12 апреля 2021 в 18:50
0

Подробнее о : и почему это deletes

Timo
12 апреля 2021 в 18:52
0

Я получаю ту же ошибку error: failed to push some refs to 'https://github.com/tik9/tik9.github.io', когда git push origin :refs/heads/main. Вероятно, виноват github.

avatar
user456814
30 мая 2014 в 18:32
2196

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

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

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

git push origin --delete <branch>  # Git version 1.7.0 or newer
git push origin -d <branch>        # Shorter version (Git 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 remote-tracking branches
git fetch <remote> -p      # Shorter

длинный ответ : нужно удалить три разных ветки!

Когда вы имеете дело с удалением ветвей как локально, так и удаленно, имейте в виду, что задействованы три разные ветки :

  1. Местный филиал X.
  2. Ветвь удаленного источника X.
  3. Локальная ветвь удаленного отслеживания origin/X, которая отслеживает удаленную ветку X.

Visualization of three 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 remote update" и "git удаленная обрезка "менее необходима (нет планов удаления" удаленной обновить "ни" удаленно удалить ").

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

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

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

См. Также

huggie
18 февраля 2016 в 02:00
0

Из вашей иллюстрации я вижу, что есть репо локального клона и репо удаленного происхождения. Итак, есть как минимум две физические ветви. Где третью ветку удалять? Является ли третья ветка только указателем, указывающим на фиксацию в локальном репозитории клонов?

user456814
23 февраля 2016 в 07:33
6

@huggie, это в значительной степени правильно. Ветви в Git - это просто закладки, прикрепленные к коммитам. Итак, на моих графиках выше есть закладки X и origin/X в локальном клоне (2 ветки), а затем есть X на пульте дистанционного управления (создание 3 веток).

Kermit_ice_tea
21 июня 2017 в 19:48
7

+1 для ветви удаленного отслеживания. Эта ветка вызывает проблемы, когда вы клонируете чужую ветку. Он продолжает отслеживать ваши коммиты и спрашивает вас, хотите ли вы нажать на ветку этого человека.

David P
5 марта 2020 в 11:21
1

Ради будущих читателей: @Kermit_ice_tea говорит выше о локальной ветке (как описано в этом ответе), а не о ветке удаленного отслеживания . Когда для локальной ветви настроена «восходящая ветвь», она по умолчанию будет извлекать и передавать данные из этой удаленной ветви. локальная ветвь , на которой установлена ​​«восходящая ветвь», - это , называемая «ветвью отслеживания», поэтому ее легко спутать с ветками удаленного отслеживания Из-за схожей терминологии.

Gabriel Staples
3 апреля 2020 в 20:35
3

Я прочитал все ответы здесь, и это, безусловно, лучший ответ, который я читал до сих пор! - (и, вероятно, лучший на этой странице, точка). Это особенно верно, потому что это единственный ответ, который заявляет об этом ДЕЙСТВИТЕЛЬНО ВАЖНОМ факте, о котором я никогда раньше не знал: « есть 3 разные ветки, которые нужно удалить! « Я понятия не имел! Все это теперь имеет гораздо больше смысла, и теперь это проливает так много света на все другие ответы здесь. Спасибо!

Gabriel Staples
5 января 2021 в 00:08
0

Что произойдет, если вы запустите git fetch --prune без указания удаленной ветви? Подрезает ли он все пульты?

Gabriel Staples
5 января 2021 в 00:40
0

Следует отметить, что запуск git push origin --delete <branch>, насколько я могу судить, ТАКЖЕ удаляет локально сохраненную ветвь удаленного отслеживания с именем origin/branch. Итак, , чтобы удалить удаленную ветвь И локально сохраненную ветвь удаленного отслеживания в одной команде, просто используйте git push origin --delete <branch>. Затем вам просто нужно удалить локальную ветвь с git branch -D branch. Это касается удаления всех 3 веток с помощью всего 2 команд.

Duncan MacIntyre
1 июня 2021 в 03:09
0

Отличный ответ - я ценю, как изображения объясняют , почему ! Вы можете подумать о том, чтобы сделать «краткий ответ» еще короче (например, перечислить только короткие версии команд, выбрать одну из -d и -D и отметить другую согласно @Eric Brotto). Альтернативные формы можно найти ниже.

avatar
Brandon Cook
27 ноября 2013 в 03:04
58

Многие другие ответы приведут к ошибкам / предупреждениям. Этот подход относительно надежен, хотя вам все равно может понадобиться 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
avatar
Dan Rosenstark
19 ноября 2013 в 21:02
46

Вот смесь всех остальных ответов. Он требует 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
Dan Rosenstark
5 декабря 2014 в 16:44
0

@chhh, тогда вам нужно расширить эту функциональность, чтобы сделать ее переменной, а не предположением.

Reishin
21 мая 2015 в 19:37
3

извините, но установить Ruby для такой работы? Более логичной является реализация на bash, которая будет работать «из коробки».

Dan Rosenstark
21 мая 2015 в 20:03
1

@Reishin Ruby устанавливается на коробку так же, как Bash, по крайней мере, на OSX. См.: coderhelper.com/questions/2342894/…, где SO отклонила эту тему как основанную на мнении.

Reishin
21 мая 2015 в 20:33
5

@Yar эта ссылка вне контекста и имеет более широкий охват. Я говорю только о git, и поскольку тема не только для OSX, выбор странен для других систем (например, * UNIX, Windows)

avatar
Felipe
24 октября 2013 в 17:36
273
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
Jonathon Reinhart
10 января 2015 в 01:08
7

Обратите внимание, что -D принудительно удаляет . Всегда лучше использовать -d, который напомнит, если вам нужно сделать что-то опасное.

Felipe
13 февраля 2015 в 11:21
13

ахахах :) решать вам: используйте -d, если хотите, чтобы git плачет, или -D, если хотите плакать.

avatar
Nacho Coloma
29 апреля 2013 в 10:39
137

С января 2013 года GitHub включил кнопку Удалить ветку рядом с каждой веткой на странице «Филиалы».

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

Cam Jackson
11 сентября 2013 в 12:18
3

Я начал использовать Github только в этом году, поэтому мне было интересно, почему это был такой высоко оцененный вопрос и почему ни один из лучших ответов не предлагал просто удалить его из веб-интерфейса Github! Интересно, что это только недавнее дополнение.

ArtOfWarfare
29 октября 2013 в 14:02
6

Я собирался указать на это. Обратите внимание, что кнопка не удалит вашу локальную ветку ... см. Этот ответ, чтобы узнать, как это сделать: coderhelper.com/a/10999165/901641

avatar
crizCraig
2 апреля 2013 в 22:11
177

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

alias git-shoot="git push origin --delete"

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

git-shoot branchname
hdost
4 декабря 2014 в 18:06
11

В итоге я просто добавил псевдоним «стрелять» в свой .gitconfig shoot = push origin --delete

neoscribe
12 декабря 2014 в 00:29
0

Если ваш источник - Atlassian Stash и ветка установлена ​​по умолчанию, вы получите сообщение об ошибке «По умолчанию удаление текущей ветки запрещено ...». Мне пришлось изменить ветку по умолчанию в Stash, чтобы она указывала на другую ветку, прежде чем я мог удалить.

mahemoff
14 октября 2015 в 07:09
0

Это совершенно просто, поскольку вы это сделали, но fyi git также позволяет вам создавать собственные команды. Поместите git push origin --delete $1 в файл на своем пути с именем git-shoot, и git shoot branchname тоже будет работать.

yourson
1 января 2021 в 04:41
0

это хорошее решение

avatar
nickleefly
12 марта 2013 в 14:57
118

Вы также можете сделать это с помощью git remote prune origin

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

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

avatar
Ryan Kohn
15 января 2013 в 19:05
139

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

user1021726
16 декабря 2014 в 08:55
6

Это то, что я искал. Мой собственный псевдоним функции оболочки не работал (Unexpected EOF), и я не мог понять почему, но это отлично работает! Единственное изменение, которое я сделал, - это замена && на ;, так что даже если первая команда не удалась, вторая все равно будет выполняться (иногда существует только локальная или только удаленная).

avatar
imanuelcostigan
18 ноября 2012 в 06:11
210

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

git push --prune origin

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

git push --mirror

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

eMBee
8 октября 2015 в 16:46
1

git push --prune origin ничего не сделал для меня на gitlab: git clone git: //repo.git; git branch -d -r origin / some-branch; git push --prune origin; дает: Все актуальное; git fetch; возвращает локально удаленные ветки; git push --mirror; теперь их действительно нет!

avatar
pfrenssen
7 ноября 2012 в 13:02
388

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

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.

Annika Backstrom
21 мая 2013 в 13:51
14

Следует уточнить, что указанная выше операция git push удаляет локальную ветвь и удаленную ветвь.

user456814
11 июня 2014 в 16:30
22

Обратите внимание, что git remote prune - несколько устаревший способ удаления устаревших ветвей удаленного отслеживания, более новый способ сделать это - использовать git fetch --prune или git fetch -p.

pfrenssen
5 декабря 2014 в 14:27
1

@RRMadhav, действительно, вы не увидите удаленную ветку после ее удаления, поскольку ссылка на удаленную ветку будет удалена для вас локально. Любой член вашей команды, который проверил эту ветку, по-прежнему будет иметь эту ссылку и все равно будет видеть ее, если не удалит ветку.

avatar
Eric Brotto
12 июня 2012 в 14:51
3484

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

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

git branch -d {the_local_branch} (используйте -D вместо принудительного удаления ветки без проверки объединенного статуса)

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

git push origin --delete {the_remote_branch}

Ссылка: Git: удалить ветку (локальную или удаленную)

TankorSmash
6 ноября 2014 в 19:04
263

@megido well -D принудительное удаление, -d выдает предупреждение, если оно еще не слито.

geeks
31 октября 2015 в 12:59
8

Если ваша локальная ветка не объединена с главным и запускает 'git branch -d your_branch, вы получите ошибку, например, error: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'.

rooby
2 февраля 2016 в 03:47
15

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

code_dredd
18 апреля 2016 в 23:07
7

Другие с клонами репозитория, из которых были удалены удаленные ветки, должны запускать git remote prune <name> (например, git remote prune origin), чтобы локально удалить устаревшие ветки, которые больше не существуют на удаленном компьютере.

Dhanuka777
19 мая 2016 в 00:53
0

Если ваша ветка в вашей вилке (не всегда origin), используйте правильный репозиторий. например git push myRepo: mrbranchtodelete

Eric
10 февраля 2017 в 13:10
3

Я хотел бы добавить, что -d выдает предупреждение, если он не объединен с текущим HEAD. Если вам нужна ясность, я рекомендую эту команду git branch -a --merged origin/master. Она перечислит все ветки, как локальные, так и удаленные; которые были объединены в мастер. Дополнительная информация здесь

SebMa
22 марта 2020 в 20:54
0

@ Eric-Brotto Чтобы ваш ответ был полным, вам нужно добавить команду git fetch -p для получения изменений на других машинах

Charming Robot
5 июля 2020 в 13:45
0

> ну -D принудительно удаляет, -d выдает предупреждение, если оно еще не слито. \ n \ n Довольно плохое название, если вы спросите меня. Должен быть -df или -d --force.

Dror Bar
28 января 2021 в 14:00
0

Если репозиторий удален, и вам нужно удалить локальную ветвь, отслеживающую удаленную ветку, используйте git branch -d -r <remote>/<branch>

avatar
u2622
24 марта 2012 в 02:21
114

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

grb delete branch

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

yourson
1 января 2021 в 04:41
0

это хорошее решение

avatar
pagetribe
27 октября 2011 в 22:22
841

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

git push --delete origin serverfix

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

git push origin :serverfix

, но это может быть проще запомнить.

cst1992
29 ноября 2017 в 07:31
1

... и безопаснее использовать: O

Amit Dash
14 февраля 2018 в 04:23
1

Вы забыли часть об удалении локальной ветки, которая может быть выполнена с помощью: git branch -d <local_branch> или git branch -D <local_branch> для принудительного удаления