38 Pytanie: Jak usunąć oddział Git lokalnie i zdalnie?

pytanie utworzone w Sat, Jun 15, 2019 12:00 AM

Chcę usunąć gałąź zarówno lokalnie, jak i zdalnie.

Nieudane próby usunięcia oddziału zdalnego

$ 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.

Co należy zrobić inaczej, aby pomyślnie usunąć remotes/origin/bugfix oddział zarówno lokalnie, jak i zdalnie?

    
15386
  1. Uwaga moderatora: Jeśli zamierzasz odpowiedzieć na to pytanie, pamiętaj, że opublikowano już 40 odpowiedzi. Czy twoja nowa odpowiedź doda jakąkolwiek znaczącą wartość?
    2014-06-11 16: 10: 42Z
  2. Uwaga: w przypadku Git 2.5+ (Q2 2015) dokładna wiadomość brzmi „ deleted remote-tracking branch ”: zobacz github.com/git/git/commit/…
    2015-05-25 14: 57: 35Z
  3. Dobry panie, chcę tylko wiedzieć, ile punktów OP skończyło na tym pytaniu?
    2019-06-13 19: 19: 53Z
30 odpowiedzi                              30                         

Streszczenie

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

Zauważ, że w większości przypadków zdalna nazwa to origin.

Usuń lokalny oddział

Aby usunąć gałąź lokalną , użyj jednej z następujących opcji:

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

Uwaga: opcja -d to alias --delete, który usuwa gałąź tylko wtedy, gdy została już w pełni scalona w gałęzi nadrzędnej. Można również użyć -D, który jest aliasem --delete --force, który usuwa gałąź „niezależnie od jej statusu scalonego”. [Źródło: man git-branch]

Usuń zdalną gałąź [Aktualizacja z 8 września 2017 r.]

Od Git v1.7.0 , możesz usunąć gałąź remote za pomocą

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

, który może być łatwiejszy do zapamiętania niż

$ git push <remote_name> :<branch_name>

, który został dodany w Git v1.5.0 ", aby usunąć zdalną gałąź lub tag."

Począwszy od Git v2.8.0 możesz również użyć git push z opcją -d jako alias dla --delete.

Dlatego zainstalowana wersja Git będzie dyktować, czy musisz użyć łatwiejszej lub trudniejszej składni.

Usuń zdalną gałąź [Oryginalna odpowiedź od 5-stycznia-2010]

Z rozdziału 3 Pro Git autor: Scott Chacon:

  

Usuwanie zdalnych gałęzi

     

Załóżmy, że skończyłeś ze zdalną gałęzią - powiedz, że ty i twoi współpracownicy ukończyliście funkcję i połączyli ją z główną gałęzią swojego zdalnego (lub jakąkolwiek gałęzią, w której znajduje się stabilna linia kodu). Możesz usunąć oddział zdalny, używając raczej tępej składni git push [remotename] :[branch]. Jeśli chcesz usunąć gałąź serwera z poprawką serwera, uruchom następujące polecenie:

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

Boom. Nie ma już żadnego oddziału na twoim serwerze. Możesz chcieć dogadać tę stronę, ponieważ będziesz potrzebować tego polecenia, a prawdopodobnie zapomnisz składni. Sposobem na zapamiętanie tego polecenia jest przywołanie składni git push [remotename] [localbranch]:[remotebranch], którą przeszliśmy nieco wcześniej. Jeśli zrezygnujesz z części [localbranch], to w zasadzie mówisz: „Nie bierz niczego po mojej stronie i spraw, by była [remotebranch]”.

Wydałem git push origin :bugfix i działało pięknie. Scott Chacon miał rację - będę chciał uchwycić psa tę stronę (lub praktycznie psie ucho przez Odpowiadając na to w Stack Overflow).

Następnie powinieneś wykonać to na innych komputerach

git fetch --all --prune

do propagowania zmian.

    
19267
2018-12-13 04: 45: 54Z
  1. Jeśli znasz składnię git push origin local_branch:remote_branch, to składnia do usunięcia gałęzi z git push origin :remote_branch jest dość urocza. Nie ma pustki przed :
    2012-05-11 04: 05: 03Z
  2. Nie zapomnij zrobić git fetch --all --prune na innych komputerach po usunięciu zdalnej gałęzi na serwerze. ||| Po usunięciu oddziału lokalnego o numerze git branch -d i usunięciu oddziału zdalnego za pomocą git push origin --delete inne maszyny mogą nadal mieć „przestarzałe gałęzie śledzenia” (aby zobaczyć je git branch -a). Aby się ich pozbyć, git fetch --all --prune.
    2015-05-27 16: 51: 36Z
  3. dodatkowo do git branch -a @ TrevorBoydSmith, aby wyświetlić wszystkie gałęzie, można także użyć tylko git branch -r, aby wyświetlić tylko odgałęzienia. patrz także git remote show origin - źródło: gitready.com/intermediate/2009/02/13 /list-remote-branches.html
    2015-09-09 09: 53: 18Z
  4. Musiałem uruchomić git branch -D Branch_Name, aby pozbyć się lokalnego oddziału
    2016-03-10 01: 32: 06Z
  5. @ KolobCanyon Wystarczy użyć -D, jeśli gałąź nie została scalona z inną gałęzią.
    2016-04-05 16: 27: 15Z

Odpowiedź Mateusza jest świetna do usuwania gałęzi zdalnego , a także doceniam to wyjaśnienie, ale aby dokonać prostego rozróżnienia między dwoma poleceniami:

Aby usunąć lokalną gałąź z komputera:

git branch -d {the_local_branch} (zamiast tego użyj -D, aby wymusić usunięcie gałęzi bez sprawdzania stanu scalonego)

Aby usunąć zdalną gałąź z serwera:

git push origin --delete {the_remote_branch}

Odniesienie: https://makandracards.com/makandra /621-git-delete-a-branch-local-or-remote

    
3040
2017-12-18 12: 33: 13Z
  1. @ megido well -D wymuszenie usunięcia, -d daje ostrzeżenie, jeśli nie zostało jeszcze scalone.
    2014-11-06 19: 04: 59Z
  2. Jeśli twoja lokalna gałąź nie jest scalona z masterem i uruchomiona 'git branch -d your_branch, wtedy będziesz błędzie jak error: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'.
    2015-10-31 12: 59: 14Z
  3. Sugerowałbym użycie -d zamiast -D, ponieważ jest bezpieczniejsze. Jeśli -d nie powiedzie się z powodu niezatapialnego zatwierdzenia, musisz to ocenić, a jeśli na pewno można usunąć to, użyj -D.
    2016-02-02 03: 47: 57Z
  4. Inne z klonami repozytorium, w których usunięto zdalne gałęzie, powinny działać git remote prune <name> (np. git remote prune origin), aby lokalnie usunąć przestarzałe gałęzie, które już nie istnieją w zdalnym.
    2016-04-18 23: 07: 39Z
  5. Chciałbym dodać, że -d daje ostrzeżenie, jeśli nie jest połączone z bieżącą HEAD. Jeśli potrzebujesz jasności, polecam to polecenie git branch -a --merged origin/master Wyświetli listę wszystkich gałęzi, zarówno lokalnych, jak i zdalnych; które zostały połączone w master. Dodatkowe informacje tutaj
    2017-02-10 13: 10: 57Z

Krótkie odpowiedzi

Jeśli potrzebujesz bardziej szczegółowych wyjaśnień następujących poleceń, zobacz długie odpowiedzi w następnej sekcji.

Usuwanie zdalnej gałęzi:

git push origin --delete <branch>  # Git version 1.7.0 or newer
git push origin :<branch>          # Git versions older than 1.7.0

Usuwanie lokalnego oddziału:

git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force delete un-merged branches

Usuwanie lokalnej gałęzi zdalnego śledzenia:

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

Długa odpowiedź: są 3 różne gałęzie do usunięcia!

Gdy masz do czynienia z usuwaniem oddziałów zarówno lokalnie, jak i zdalnie, pamiętaj, że istnieją trzy różne gałęzie :

  1. Oddział lokalny X.
  2. Zdalna gałąź początkowa X.
  3. Lokalna gałąź zdalnego śledzenia origin/X, która śledzi oddział zdalny X.

Wizualizacja 3 gałęzi

Oryginalny plakat użyty

git branch -rd origin/bugfix

, który usunął tylko swoją lokalną gałąź śledzenia zdalnego origin/bugfix, a nie rzeczywistą gałąź zdalną bugfix pod origin.

Diagram 2

Aby usunąć rzeczywistą gałąź zdalną , musisz

git push origin --delete bugfix

Diagram 3

Dodatkowe informacje

Poniższe sekcje opisują dodatkowe szczegóły do ​​rozważenia podczas usuwania gałęzi zdalnego i zdalnego śledzenia.

Naciśnięcie, aby usunąć zdalne gałęzie, usuwa również gałęzie zdalnego śledzenia

Pamiętaj, że usunięcie zdalnej gałęzi X z wiersza polecenia za pomocą git push spowoduje również usunięcie lokalnej gałęzi śledzenia zdalnego origin/X, więc nie jest konieczne przycinanie przestarzałej gałęzi śledzenia zdalnego git fetch --prune lub git fetch -p, choć i tak by to nie zaszkodziło.

Możesz sprawdzić, czy gałąź zdalnego śledzenia origin/X została również usunięta, uruchamiając następujące polecenie:

# 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

Przycinanie przestarzałego źródła lokalnego śledzenia zdalnego /X

Jeśli nie usunąłeś zdalnej gałęzi X z wiersza poleceń (jak powyżej), to twoje lokalne repo będzie nadal zawierać (obecnie przestarzały) oddział zdalnego śledzenia origin/X. Może się tak zdarzyć, jeśli usunąłeś oddział zdalny bezpośrednio na przykład za pomocą interfejsu internetowego GitHub.

Typowym sposobem usunięcia tych przestarzałych gałęzi zdalnego śledzenia (od wersji 1.6.6) jest po prostu uruchomienie git fetch z --prune lub krótszym -p. Należy zauważyć, że usuwa wszystkie przestarzałe lokalne gałęzie zdalnego śledzenia dla dowolnego odległe oddziały, które nie istnieją już na zdalnym :

git fetch origin --prune
git fetch origin -p # Shorter

Oto odpowiedni cytat z 1.6.6 uwagi do wydania (podkreślenie moje):

  

„git fetch” nauczyłeś się --all i --multipleopcje, aby uruchomić pobieranie z   wiele repozytoriów i --prune opcja usuwania zdalnego śledzenia   gałęzie, które się zestarzały   zdalne przycinanie „mniej potrzebne (nie ma planu usunięcia„ zdalnie ”   aktualizacja „ani„ zdalne przycinanie ”).

Alternatywa dla powyższego automatycznego przycinania dla przestarzałych gałęzi zdalnego śledzenia

Alternatywnie, zamiast przycinania przestarzałych lokalnych gałęzi zdalnego śledzenia przez git fetch -p, można uniknąć dodatkowej operacji sieciowej , po prostu ręcznie usuwając rozgałęzienia z flagami --remote lub -r:

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

Zobacz także

1760
2016-03-10 12: 20: 26Z
  1. Z twojej ilustracji widzę, że istnieją lokalne repo klonów i repo z odległego pochodzenia. Są więc co najmniej dwie fizyczne gałęzie. Gdzie jest trzecia gałąź do usunięcia? Czy trzecia gałąź jest tylko wskaźnikiem wskazującym na zatwierdzenie w lokalnym repozytorium klonów?
    2016-02-18 02: 00: 40Z
  2. @ huggie to całkiem poprawne. Oddziały w Git to tylko zakładki dołączone do zatwierdzeń. Tak więc na moich wykresach powyżej znajdują się X i origin/X zakładki w lokalnym klonie (2 gałęzie), a następnie na pilocie jest X (tworząc 3 gałęzie).
    2016-02-23 07: 33: 42Z
  3. + 1 dla gałęzi zdalnego śledzenia. Ta gałąź jest przyczyną problemów podczas klonowania czyjegoś oddziału. Ciągle śledzi twoje zatwierdzenia i pyta cię, czy chcesz przesłać do oddziału tej osoby.
    2017-06-21 19: 48: 20Z

Kroki usuwania gałęzi:

Za usunięcie oddziału zdalnego:

git push origin --delete <your_branch> 

Aby usunąć lokalny oddział , masz trzy sposoby :

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

Wyjaśnij: OK, po prostu wyjaśnij, co się tutaj dzieje!

Po prostu wykonaj git push origin --delete, aby usunąć gałąź zdalną TYLKO , dodaj nazwę gałęzi na końcu, a to usunie i pchnie ją do zdalnego jednocześnie ...

Również git branch -D, który po prostu usuwa lokalny oddział TYLKO ! ...

-D oznacza --delete --force, który usunie gałąź, nawet jeśli nie została scalona (wymuś usunięcie), ale można również użyć -d, co oznacza --delete, co powoduje błąd związany ze statusem scalania gałęzi ...

Tworzę także poniższy obrazek, aby pokazać kroki:

 usuń zdalny i lokalny oddział w git

    
1321
2019-03-22 07: 08: 35Z
  1. git branch -a wyświetli lokalne i zdalne gałęzie. Pomocne będzie wprowadzenie diagramu.
    2017-07-27 03: 01: 39Z
  2. zauważ, że jeśli ustawisz na gałęzi, którą chcesz usunąć, musisz usunąć gałąź inną niż ta, którą musisz usunąć (np. master) przed usunięciem lokalny oddział.
    2018-05-28 08: 43: 55Z
  3. Gdy gałęzie zostaną usunięte w miejscu pochodzenia, twoje lokalne repozytorium nie zauważy tego. Nadal będziesz mieć lokalnie buforowane wersje tych gałęzi (co jest w rzeczywistości dobre), ale gałąź git -a nadal będzie wymieniać je jako odległe gałęzie. Możesz wyczyścić te informacje lokalnie w następujący sposób: git remote prune origin Twoje lokalne kopie usuniętych gałęzi nie są przez to usuwane. Ten sam efekt uzyskuje się za pomocą git fetch --prune
    2019-05-08 06: 33: 45Z

Możesz również użyć poniższej opcji, aby usunąć oddział zdalny

git push --delete origin serverfix

Co robi to samo co

git push origin :serverfix

ale może być łatwiejszy do zapamiętania.

    
753
2018-12-13 04: 44: 17Z
    ... i bezpieczniejszy w użyciu: O
    2017-11-29 07: 31: 21Z
  1. Zapomniałeś części o usunięciu lokalnego oddziału, która może być wykonana przez: git branch -d <local_branch> lub git branch -D <local_branch> dla usunięcia siły
    2018-02-14 04: 23: 55Z

Wskazówka: kiedy usuwasz gałęzie używając

git branch -d <branchname> # deletes local branch

lub

git push origin :<branchname> # deletes remote branch

usuwane są tylko odwołania. Mimo że gałąź jest faktycznie usuwana na zdalnym komputerze, odniesienia do niej nadal istnieją w lokalnych repozytoriach członków zespołu. Oznacza to, że dla innych członków zespołu usunięte gałęzie są nadal widoczne, gdy wykonują git branch -a.

Aby rozwiązać ten problem, członkowie zespołu mogą przyciąć usunięte gałęzie za pomocą

git remote prune <repository>

Zazwyczaj jest to git remote prune origin.

    
360
2018-12-13 04: 44: 30Z
  1. Powinieneś wyjaśnić, że powyższa operacja git push usuwa lokalną gałąź i oddział zdalny.
    2013-05-21 13: 51: 46Z
  2. Zauważ, że git remote prune jest nieco przestarzałym sposobem usuwania przestarzałych gałęzi zdalnego śledzenia, nowszym sposobem jest użycie git fetch --prune lub git fetch -p.
    2014-06-11 16: 30: 04Z
  3. @ RRMadhav, rzeczywiście nie zobaczysz usuniętej gałęzi po jej usunięciu, ponieważ odwołanie do zdalnej gałęzi zostanie usunięte lokalnie. Każdy inny członek twojego zespołu, który wyewidencjonował ten oddział, nadal będzie miał to odniesienie i nadal będzie go widzieć, chyba że odetnie oddział.
    2014-12-05 14: 27: 38Z

Jeśli chcesz usunąć oddział, pierwszą kasę do gałęzi innej niż gałąź, którą chcesz usunąć.

git checkout other_than_branch_to_be_deleted

Usuwanie lokalnego oddziału:

git branch -D branch_to_be_deleted

Usuwanie zdalnej gałęzi:

git push origin --delete branch_to_be_deleted
    
359
2015-06-09 02: 04: 02Z
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
    
259
2014-08-08 20: 04: 03Z
  1. Zauważ, że -D wymusza usunięcie. Zawsze lepiej jest użyć -d, co przypomni, jeśli musisz zrobić coś niebezpiecznego.
    2015-01-10 01: 08: 57Z
  2. ahahah :) to zależy od ciebie: użyj -d, jeśli chcesz zobaczyć git crying lub -D, jeśli chcesz płakać.
    2015-02-13 11: 21: 07Z

To jest proste: wystarczy uruchomić następującą komendę:

Aby usunąć gałąź Git zarówno lokalnie, jak i zdalnie, najpierw usuń lokalną gałąź za pomocą polecenia:

git branch -d example

(tutaj example to nazwa oddziału)

A potem usuń zdalną gałąź za pomocą polecenia:

git push origin :example
    
221
2015-06-09 02: 03: 14Z

Innym podejściem jest: -

git push --prune origin

OSTRZEŻENIE : Spowoduje to usunięcie wszystkich zdalnych gałęzi, które nie istnieją lokalnie. Lub bardziej kompleksowo,

git push --mirror

sprawi, że zdalne repozytorium będzie wyglądało jak lokalna kopia repozytorium (lokalne głowice, piloty i tagi są dublowane na zdalnym).

    
192
2018-12-13 04: 44: 03Z
  1. git push - prrune origin nie zrobił dla mnie nic na gitlab: git clone git: //repo.git; gałąź git -d -r pochodzenie /niektóre-gałęzie; git push - pochodzenie śliwki; plony: wszystko aktualne; git fetch; przywraca lokalnie usunięte gałęzie; git push --mirror; teraz naprawdę ich nie ma!
    2015-10-08 16: 46: 25Z

Używam następujących opcji w moich ustawieniach Bash :

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

Następnie możesz zadzwonić:

git-shoot branchname
    
163
2018-12-13 04: 43: 53Z
  1. Skończyłem po prostu dodać alias "shoot" do mojego .gitconfig shoot = push origin --delete
    2014-12-04 18: 06: 37Z
  2. Jeśli twoje pochodzenie jest Atlassian Stash i gałąź jest ustawiona jako domyślna, pojawi się błąd "Domyślnie usunięcie bieżącej gałęzi jest zabronione ..." . Musiałem zmienić domyślną gałąź w Stash, aby wskazać inną gałąź, zanim mogłem ją usunąć.
    2014-12-12 00: 29: 35Z
  3. Jest to całkowicie proste, jak już to zrobiłeś, ale fyi git pozwala również tworzyć własne polecenia. Umieść git push origin --delete $1 w pliku na swojej ścieżce o nazwie git-shoot i git shoot branchname również będzie działać.
    2015-10-14 07: 09: 31Z

Od stycznia 2013 r. GitHub umieścił przycisk Usuń gałąź obok każdej gałęzi na stronie „Oddziały”.

Odpowiedni wpis na blogu: Tworzenie i usuwanie oddziałów

    
128
2018-12-13 04: 42: 21Z
  1. Zacząłem używać Github dopiero w tym roku, więc zastanawiałem się, dlaczego było to tak wysoko oceniane pytanie i dlaczego żadna z najlepszych odpowiedzi nie sugerowała, aby go usunąć interfejs internetowy Github! Ciekawe, że to tylko niedawny dodatek.
    2013-09-11 12: 18: 54Z
  2. Chciałem to wskazać. Zauważ, że przycisk nie usunie twojego lokalnego oddziału ... zobacz tę odpowiedź, jak to zrobić: stackoverflow.com/a/10999165 /901641
    2013-10-29 14: 02: 45Z

Usuń lokalnie:

Aby usunąć lokalny oddział, możesz użyć:

git branch -d <branch_name> 

Aby usunąć oddział na siłę, użyj -D zamiast -d.

git branch -D <branch_name>

Usuń zdalnie:

Istnieją dwie opcje:

git push origin :branchname  

git push origin --delete branchname 

Proponuję, abyś użył drugiej drogi, ponieważ jest bardziej intuicyjny.

    
123
2018-12-13 04: 45: 05Z

Jeśli chcesz wykonać oba te kroki jednym poleceniem, możesz utworzyć dla niego alias, dodając poniższy tekst do swojego ~/.gitconfig:

[alias]
    rmbranch = "!f(){ git branch -d ${1} && git push origin --delete ${1}; };f"

Alternatywnie możesz dodać to do swojej globalnej konfiguracji z linii poleceń używając

git config --global alias.rmbranch \
'!f(){ git branch -d ${1} && git push origin --delete ${1}; };f'

UWAGA : jeśli używasz -d (mała litera d), gałąź zostanie usunięta tylko wtedy, gdy zostanie scalona. Aby wymusić usunięcie, musisz użyć -D (wielkie litery D).

    
121
2014-06-11 16: 26: 17Z
  1. Tego właśnie szukałem. Mój własny alias funkcji powłoki nie działał (nieoczekiwany EOF) i nie mogłem zrozumieć dlaczego, ale to działa świetnie! Jedyną zmianą, jaką zrobiłem, było zastąpienie && ;, tak że nawet jeśli pierwsze polecenie nie powiedzie się, drugie nadal będzie wykonywane (czasami istnieje tylko lokalny lub tylko zdalny).
    2014-12-16 08: 55: 29Z

Aby usunąć oddział lokalnie i zdalnie

  • Checkout to master branch - git checkout master

  • Usuń swoją zdalną gałąź - git push origin --delete <branch-name>

  • Usuń lokalny oddział - git branch --delete <branch-name>

113
2017-12-13 22: 10: 51Z

Możesz to zrobić również używając git remote prune origin

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

Przycina i usuwa gałęzie śledzenia zdalnego z listy git branch -r.

    
108
2018-12-13 04: 43: 19Z

Oprócz innych odpowiedzi często korzystam z narzędzia git_remote_branch . Jest to dodatkowa instalacja, ale zapewnia wygodny sposób interakcji ze zdalnymi oddziałami. W tym przypadku, aby usunąć:

grb delete branch

Dość często używam poleceń publish i track

    
104
2018-12-13 04: 41: 10Z
Polecenie

Jedna linijka usuwa zarówno lokalne, jak i zdalne :

D=branch-name; git branch -D $D; git push origin :$D

lub dodaj alias poniżej do swojego ~ /.gitconfig ; użycie: git kill branch-name

[alias]
    kill = "!f(){ git branch -D \"$1\";  git push origin --delete \"$1\"; };f"
    
93
2017-01-15 08: 30: 43Z
  1. ⚠️ Używaj git branch -D ostrożnie w skrypcie, ponieważ wymusza usunięcie gałęzi bez sprawdzania, czy została scalona. Użyj -d, aby być bezpiecznym.
    2017-03-13 14: 05: 07Z

Usuwanie gałęzi

  

Załóżmy, że pracujemy nad oddziałem „formularz kontaktowy”zostało zrobione i już zintegrowaliśmy go z „mistrzem”. Ponieważ już go nie potrzebujemy, możemy go usunąć (lokalnie):

$ git branch -d contact-form

I do usuwania zdalnej gałęzi:

git push origin --delete contact-form
    
91
2015-11-18 19: 51: 13Z

Usuń zdalną gałąź

git push origin :<branchname>

Usuń lokalny oddział

git branch -D <branchname>

Usuń kroki lokalnego oddziału:

  1. checkout do innej gałęzi
  2. usuń lokalny oddział
86
2016-02-19 18: 05: 46Z
  1. Czy zdalne usunięcie gałęzi wymaga późniejszego "git push"?
    2016-02-17 08: 32: 54Z
  2. @ SamithaChathuranga no, git push origin :<branchname> już wypycha gałąź 'empty` na pilota (stąd usuwa gałąź zdalną)
    2017-06-09 22: 20: 55Z

Po prostu powiedz:

git branch -d <branch-name>
git push origin :<branch-name>
    
85
2016-06-25 12: 52: 01Z
  1. To działa, jeśli jest to twoja własna gałąź. Ale jeśli przycinasz wszystkie niepotrzebne gałęzie w repo (niektóre z nich nie są twoje), to nie wystarczy
    2016-06-30 22: 23: 07Z
git push origin --delete <branch Name>

jest łatwiejszy do zapamiętania niż

git push origin :branchName
    
80
2018-12-13 04: 44: 45Z

Teraz możesz to zrobić za pomocą aplikacji GitHub Desktop .

Po uruchomieniu aplikacji

  1. Kliknij projekt zawierający gałąź
  2. Przejdź do gałęzi, którą chcesz usunąć  przełączanie gałęzi
  3. Z menu „Oddział” wybierz „Usuń publikację ...”, aby gałąź została usunięta z serwerów GitHub. cofnij publikację gałęzi
  4. Z menu „Oddział” wybierz „Usuń” nazwa_branży „...”, aby gałąź została usunięta z lokalnego komputera (aka maszyna, nad którą obecnie pracujesz) usuń lokalny oddział
79
2016-12-16 03: 58: 50Z
  1. Nie pomogłem, ale myślę, że to nie pomaga. Pytanie oczywiście wymaga odpowiedzi typu linii poleceń bez konieczności używania zewnętrznego programu, jeśli ludzie klikną tutaj, prawdopodobnie nie będą szukać githuba na pulpicie.
    2015-11-06 11: 51: 15Z
  2. @ Daemedeor, nie zgadzam się. W 2010 r., Gdy OP zadał pytanie, sposób działania interfejsu użytkownika nie istniał, a jedyną opcją był wiersz poleceń. Aby wskazać, że chcesz mieć tylko opcję wiersza poleceń, należy ją podać w pytaniu lub w tagu, wiersza polecenia- interface , która w tym przypadku nie jest obecna.
    2015-11-06 16: 00: 39Z
  3. Polecenie git do usuwania zdalnej gałęzi jest do niczego i zwykle go zapominam (zarówno nowy, jak i stary). Na szczęście istnieją narzędzia GUI z opcją. Git Gui, TortoiseGit i GitHub Desktop mają to - chciałbym, żeby Git Extensions też miał taką funkcjonalność. W każdym razie pamiętam, aby uruchomić Git Gui z poziomu Git Extensions, gdy muszę usunąć oddział zdalny.
    2016-03-25 21: 59: 21Z

Aby usunąć lokalnie - (normalny),

git branch -d my_branch

Jeśli oddział, który dokonał zmiany /scalenia postępu i nie został prawidłowo wykonany, otrzymasz błąd Rebase/Merge in progress, więc w takim przypadku nie będziesz mógł usunąć swojego oddziału.

Więc albo twoja potrzeba rozwiązania rebasingu /scalania, w przeciwnym razie możesz wymusić usunięcie używając

git branch -D my_branch

Aby usunąć w Remote:

git push --delete origin my_branch

może zrobić to samo,

git push origin :my_branch   # easy to remember both will do the same.

Reprezentacja graficzna,

 wprowadź opis obrazu tutaj>> </a> </p>
    </div>
<div class = 73

2017-11-19 10: 24: 03Z

To nie zadziała, jeśli masz tag o tej samej nazwie co oddział na pilocie:

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

W takim przypadku musisz określić, że chcesz usunąć gałąź, a nie tag:

git push origin :refs/heads/branch-or-tag-name

Podobnie, aby usunąć tag zamiast gałęzi, której chcesz użyć:

git push origin :refs/tags/branch-or-tag-name
    
65
2018-12-13 04: 43: 05Z
  1. To jest w porządku, ale ludzie nie powinni nazywać swoich gałęzi i tagów tą samą nazwą i tym samym schematem nazewnictwa.
    2014-07-29 10: 00: 02Z
  2. Cóż, mój scenariusz polegał na tym, że konwertowałem gałąź na tag i sensowne było, aby tag miał taką samą nazwę jak gałąź. Przez konwersję mam na myśli połączenie gałęzi B z A i oznaczenie ostatniego zatwierdzenia w gałęzi B tagiem B, aby po usunięciu gałęzi B nadal można było ją łatwo przywrócić, po prostu zaznaczając tag B.
    2014-07-30 11: 59: 10Z

Wiele innych odpowiedzi prowadzi do błędów /ostrzeżeń. Podejście to jest stosunkowo głupim dowodem, chociaż nadal możesz potrzebować git branch -D branch_to_delete, jeśli nie zostanie ono w pełni połączone na przykład w some_other_branch.

git checkout some_other_branch
git push origin :branch_to_delete
git branch -d branch_to_delete

Zdalne przycinanie nie jest konieczne, jeśli usunięto zdalną gałąź. Służy tylko do udostępniania najbardziej aktualnych pilotów w repozytorium, które śledzisz. Zauważyłem, że git fetch doda piloty, a nie je usunie. Oto przykład, kiedy git remote prune origin rzeczywiście coś zrobi:

Użytkownik A wykonuje powyższe kroki. Użytkownik B uruchamia następujące polecenia, aby zobaczyć najbardziej aktualne zdalne oddziały

git fetch
git remote prune origin
git branch -r
    
51
2018-12-13 04: 41: 37Z

Miałem dość gogli dla tej odpowiedzi, więc podjąłem podobne podejście do odpowiedzi, którą crizCraig opublikował wcześniej.

Dodano następujące informacje do mojego profilu Bash:

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

Następnie za każdym razem, gdy kończę pracę z oddziałem (scalonym w master, na przykład) W moim terminalu uruchamiam następujące polecenie:

gitdelete my-branch-name

... która następnie usuwa my-branch-name z origin jak również lokalnie.

    
49
2017-05-23 12: 34: 58Z
  1. rozwijając to, --delete "$@" i -D "$@" zamiast $1 obsłuży go dla wielu oddziałów.
    2016-06-27 13: 15: 19Z
  2. Sugeruję uruchomienie git branch -d (z małą literą „d”), aby upewnić się, że zmiany zostały scalone, a następnie naciśnij, jeśli się powiedzie (wstaw && między komendami)
    2016-07-19 14: 17: 45Z

Przed wykonaniem

git branch --delete <branch>

upewnij się, że najpierw określasz, jaka nazwa DOKŁADNA gałęzi zdalnej jest wykonywana:

git ls-remote

To powie Ci, co należy wprowadzić DOKŁADNIE dla wartości <branch>. (branch rozróżnia wielkość liter!)

    
45
2016-06-25 12: 56: 09Z
git push origin :bugfix  # Deletes remote branch
git branch -d bugfix     # Must delete local branch manually

Jeśli jesteś pewien, że chcesz go usunąć, uruchom

git branch -D bugfix

Teraz wyczyścić usunięte zdalne gałęzie uruchomić

git remote prune origin
    
44
2016-04-21 16: 49: 36Z

Zmodyfikuj wszystkie pozostałe odpowiedzi. Wymaga Ruby 1.9.3+, przetestowany tylko w systemie OS X.

Wywołaj ten plik git-remove, spraw, aby był wykonywalny i umieść go na swojej ścieżce. Następnie użyj na przykład 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
2018-12-13 04: 42: 35Z
  1. jedna litera dzięki uprzejmości tej odpowiedzi: stackoverflow.com/a/8072675/8047
    2013-11-19 21: 04: 12Z
  2. @ chhh, a następnie musisz rozszerzyć tę funkcjonalność, aby stała się zmienną zamiast założeniem.
    2014-12-05 16: 44: 44Z
  3. przepraszam, ale zainstaluj Ruby dla tego rodzaju pracy? Bardziej logiczna jest implementacja na bashu, która będzie działać poza pudełkiem.
    2015-05-21 19: 37: 04Z
  4. @ Reishin Ruby jest zainstalowany na pudełku tak jak Bash, przynajmniej w OSX. Zobacz: stackoverflow.com/questions/2342894/… , gdzie ten temat został odrzucony jako opinia na podstawie SO.
    2015-05-21 20: 03: 07Z
  5. @ Yar to łącze jest poza kontekstem i ma szerszy zakres. Opowiadam tylko o git, a ponieważ temat nie pochodzi tylko z OSX, to jest dziwne dla innych systemów (np. * UNIX, Windows)
    2015-05-21 20: 33: 30Z
źródło umieszczone tutaj