Pytanie Jak usunąć gałąź Git lokalnie i zdalnie?


Chcę usunąć oddział zarówno lokalnie, jak i na moim zdalnym widoku projektu GitHub.

Nie powiodło się próba usunięcia odległego oddziału

$ 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 muszę zrobić inaczej, aby pomyślnie usunąć remotes/origin/bugfix oddział zarówno lokalnie, jak i na GitHub?


13843
2018-01-05 01:12


pochodzenie


Uwaga moderatora: Jeśli chcesz odpowiedzieć na to pytanie, zwróć uwagę, że zostało już wysłanych 40 odpowiedzi. Czy twoja nowa odpowiedź doda jakąś istotną wartość? - Robert Harvey♦
Uwaga: dla Git 2.5+ (Q2 2015), dokładna wiadomość będzie "deleted remote-tracking branch": widzieć github.com/git/git/commit/... - VonC


Odpowiedzi:


Streszczenie

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

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

Usuń lokalny oddział

Aby usunąć lokalny oddział korzysta z jednego z poniższych:

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

Uwaga: The -d opcja jest aliasem dla --delete, który usuwa tylko oddział, jeśli został już w pełni scalony w swoim odgałęzionym oddziale. Możesz również użyć -D, który jest aliasem dla --delete --force, który usuwa gałąź "niezależnie od statusu połączonego". [Źródło: man git-branch]

Usuń zdalny oddział [Zaktualizowano od 8 września 2017 r.]

Od teraz Git v1.7.0, możesz usunąć a zdalny oddział za pomocą

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

które może być łatwiejsze do zapamiętania niż

$ git push <remote_name> :<branch_name>

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

Począwszy od Git v2.8.0 możesz także użyć git push z -d opcja jako alias dla --delete.

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

Usuń zdalny oddział [Original Answer from 5-Jan-2010]

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

Usuwanie odległych gałęzi

Załóżmy, że skończyłeś ze zdalną gałęzią - powiedzmy, że ty i twoi współpracownicy zakończyliście działanie funkcji i połączyliście ją z główną gałęzią (lub inną gałęzią, w której znajduje się stabilna kodeka). Możesz usunąć zdalną gałąź używając raczej rozwlekłej składni git push [remotename] :[branch]. Jeśli chcesz usunąć gałąź serwera serverfix z serwera, uruchom następujące czynności:

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

Bum. Koniec z odgałęzieniem na twoim serwerze. Możesz chcieć zabrać ze sobą tę stronę, ponieważ będziesz potrzebować tego polecenia i prawdopodobnie zapomnisz składni. Sposobem zapamiętania tego polecenia jest przywołanie git push [remotename] [localbranch]:[remotebranch] składnia, którą przeszliśmy nieco wcześniej. Jeśli przestaniesz [localbranch] część, wtedy zasadniczo mówisz: "Nie bierz niczego po mojej stronie i spraw, żeby tak było [remotebranch]. "

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

Następnie powinieneś wykonać to na innych komputerach

git fetch --all --prune

aby propagować zmiany.


17234
2018-01-05 01:13



Jeśli znasz składnię git push origin local_branch:remote_branch, a następnie składnia, aby usunąć gałąź z git push origin :remote_branch jest trochę urocza. Przed tym jest pustka : - Marc-André Lafortune
Nie zapomnij zrobić git fetch --all --prune na innych komputerach po usunięciu oddziału zdalnego na serwerze. ||| Po usunięciu lokalnego oddziału za pomocą git branch -d i usuwanie zdalnego oddziału za pomocą git push origin --delete inne maszyny mogą nadal mieć "przestarzałe gałęzie śledzenia" (aby je zobaczyć) git branch -a). Aby się ich pozbyć, zrób to git fetch --all --prune. - Trevor Boyd Smith
oprócz @ TrevorBoydSmith's git branch -a aby wyświetlić wszystkie gałęzie, możesz również użyć git branch -r aby wyświetlić tylko odległe gałęzie. Zobacz też git remote show origin - źródło: gitready.com/intermediate/2009/02/13/list-remote-branches.html - Sandra
Musiałem uciekać git branch -D Branch_Name pozbyć się lokalnego oddziału - Kolob Canyon
@KolobCanyon Musisz tylko użyć -D, jeśli gałąź nie została połączona z inną gałęzią. - BTRUE


Odpowiedź Mateusza jest świetna do usuwania zdalny gałęzie i ja również doceniam wyjaśnienie, ale aby dokonać prostego rozróżnienia między dwoma poleceniami:

Aby usunąć oddział lokalny z Twojego komputera:

git branch -d {the_local_branch} (posługiwać się -D zamiast tego wymusić usunięcie gałęzi bez sprawdzania stanu scalenia)

Aby usunąć zdalny oddział z serwera:

git push origin --delete {the_remote_branch}

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


2872
2018-06-12 14:51



@megido dobrze -D wymuszenie usuwa, -d wyświetla ostrzeżenie, jeśli nie zostało jeszcze scalone. - TankorSmash
Jeśli twój lokalny oddział nie łączy się z mistrzem i nie działa 'git branch -d your_branch wtedy będzie błąd 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'. - geeks
Sugerowałbym użycie opcji -d zamiast -D, ponieważ jest bezpieczniejsze. Jeśli -d nie powiedzie się z powodu niezamkniętych zatwierdzeń, to musisz to ocenić i jeśli jest to zdecydowanie poprawne, użyj -D. - rooby
Inne z klonami repozytoriów, w których usunięto odległe gałęzie, powinny działać git remote prune <name>(na przykład. git remote prune origin) w celu lokalnego usunięcia nieaktualnych gałęzi, które już nie istnieją w pilocie. - code_dredd
Jeśli twoja gałąź w twoim widelcu (nie zawsze pochodzi), użyj odpowiedniego repozytorium. na przykład git push myRepo: mrbranchtodelete - Dhanuka777


Krótkie odpowiedzi

Jeśli chcesz bardziej szczegółowe wyjaśnienie poniższych 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 śledzenia zdalnego:

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

The Long Answer: istnieją 3 różne gałęzie do usunięcia!

Kiedy masz do czynienia z usuwaniem oddziałów zarówno lokalnie, jak i zdalnie, pamiętaj o tym w grę wchodzą 3 różne gałęzie:

  1. Lokalny oddział X.
  2. Zdalny oddział początkowy X.
  3. Lokalny oddział śledzenia zdalnego origin/X który śledzi zdalny oddział X.

Visualization of 3 branches

Wykorzystano oryginalny plakat

git branch -rd origin/bugfix

który tylko skasował jego lokalny oddział śledzenia zdalnego  origin/bugfix, a nie faktyczny oddział zdalny bugfix na origin.

Diagram 2

Aby usunąć aktualną gałąź zdalną, potrzebujesz

git push origin --delete bugfix

Diagram 3

Dodatkowe Szczegóły

W poniższych sekcjach opisano dodatkowe szczegóły, które należy wziąć pod uwagę podczas usuwania oddziałów zdalnego i zdalnego śledzenia.

Naciśnięcie w celu usunięcia odległych oddziałów powoduje również usunięcie oddziałów śledzenia zdalnego

Zauważ, że usunięcie zdalnej gałęzi X z wiersza poleceń za pomocą a git push  usunie również lokalną gałąź śledzenia zdalnego  origin/X, więc nie trzeba przycinać przestarzałej gałęzi zdalnego śledzenia za pomocą git fetch --prune lub git fetch -p, chociaż nie zaszkodzi, jeśli to zrobisz.

Możesz zweryfikować, że gałąź zdalnego śledzenia origin/X został również usunięty, uruchamiając następujące:

# 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

Wycinanie przestarzałego lokalnego pochodzenia zdalnego śledzenia gałęzi / X

Jeśli nie usunąłeś oddziału zdalnego X z wiersza poleceń (jak wyżej), wtedy twoje lokalne repo będzie nadal zawierać (przestarzały) oddział zdalnego śledzenia origin/X. Może się tak zdarzyć, jeśli na przykład usunięto oddział zdalny bezpośrednio przez interfejs sieciowy GitHub.

Typowy sposób usuwania tych przestarzałych gałęzi śledzenia zdalnego (od wersji Git 1.6.6) jest po prostu uruchamiany git fetch z --prune lub krócej -p. Zauważ, że to usuwa wszystkie przestarzałe lokalne gałęzie śledzenia zdalnego dla wszystkich odległych gałęzi, które już nie istnieją na pilocie:

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

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

"nauczyłem się git fetch"  --all i --multipleopcje, aby uruchomić pobieranie z   wiele repozytoriów, oraz --prune opcja usunięcia zdalnego śledzenia   gałęzie, które zestarzały się.  Tworzą one "git remote update" i "git   zdalne przycinanie "mniej potrzebne (nie ma planu na usunięcie" zdalnego   update "ani" remote prune ").

Alternatywne rozwiązanie do automatycznego przycinania przestarzałych gałęzi zdalnego śledzenia

Alternatywnie, zamiast przycinać przestarzałe lokalne odlegle śledzenia oddziałów git fetch -p, możesz uniknąć dodatkowej operacji sieciowej przez ręczne usunięcie gałęzi (-ów) za pomocą --remote lub -r flagi:

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

Zobacz też


1641
2018-05-30 18:32



Z waszej ilustracji widzę lokalne repozytorium klonów i zdalne repozytorium pochodzenia. Istnieją co najmniej dwie fizyczne gałęzie. Gdzie jest trzeci oddział do usunięcia? Czy trzecia gałąź to tylko wskaźnik wskazujący na zatwierdzenie w lokalnym repozytorium klonowania? - huggie
@Huggie to prawie poprawne. Oddziały w Git to tylko zakładki dołączane do commitów. Tak więc na moich wykresach powyżej X i origin/X zakładki w lokalnym klonie (2 gałęzie), a potem jest X na pilocie (tworząc 3 gałęzie).
+1 dla zdalnej gałęzi śledzenia. Ta gałąź powoduje problemy podczas klonowania gałęzi innej osoby. Śledzi twoje zatwierdzenia i pyta, czy chcesz przejść do oddziału tej osoby. - Kermit_ice_tea


Kroki usuwania gałęzi:

do usuwania zdalny oddział:

git push origin --delete <your_branch> 

do usuwania oddział lokalnymasz 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śniać: OK, po prostu wyjaśnij, co tu się dzieje!

Po prostu rób git push origin --delete do usuń TYLKO zdalny oddział, dodaj nazwę oddziału na końcu, a to usunie i popchnie do zdalnego w tym samym czasie ...

Również, git branch -D, które po prostu usuwają lokalny oddział TYLKO! ...

-D oznacza --delete --force która usunie gałąź, nawet jeśli nie jest scalona (wymuszaj usuwanie), ale możesz również użyć -d co oznacza --delete które rzucają błąd odpowiedniego statusu statusu oddziału ...

Tworzę również obraz poniżej, aby pokazać kroki:

delete a remote and local branch in git


927
2018-06-27 13:13



git branch -a wyświetli lokalne i zdalne gałęzie. Pomoże ci przedstawić diagram. - LoranceChen
zwróć uwagę, że jeśli ustawiasz gałąź, którą chcesz usunąć, musisz usunąć oddział inny niż ten, który musisz usunąć (np. master) przed usunięciem lokalnego oddziału. - BaDr Amer
[off topic] w jaki sposób stworzyłeś powyższy niesamowity obraz? - Lucas Caton


Można również użyć następujących opcji, aby usunąć gałąź zdalną.

git push --delete origin serverfix

Co robi to samo co

git push origin :serverfix

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


703
2017-10-27 22:22



... i bezpieczniejsze w użyciu: O - cst1992
Zapomniałeś części o usunięciu lokalnego oddziału, którą można wykonać przez: git branch -d <local_branch> lub git branch -D <local_branch> do usuwania siły - Amit Dash


Jeśli chcesz usunąć oddział, najpierw sprawdź w oddziale innym niż oddział do usunięcia.

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

344
2017-10-07 13:52





Wskazówka: gdy usuniesz gałęzie za pomocą

git branch -d <branchname>    # deletes local branch

lub

git push origin :<branchname> # deletes remote branch

tylko odniesienia są usuwane. Mimo że gałąź jest faktycznie usunięta na pilocie, odniesienia do niej nadal istnieją w lokalnych repozytoriach członków zespołu. Oznacza to, że dla pozostałych członków zespołu usunięte gałęzie są nadal widoczne, gdy robią a git branch -a.

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

git remote prune <repository>

Zwykle tak jest git remote prune origin.


329
2017-11-07 13:02



Powinieneś wyjaśnić powyższe git push operacja usuwa lokalny oddział i zdalny oddział. - Annika Backstrom
Zauważ, że git remote prune jest dość przestarzałą metodą usuwania przestarzałych gałęzi zdalnego śledzenia, nowszym sposobem jest użycie git fetch --prune lub git fetch -p.
@RRMadhav, rzeczywiście nie zobaczysz usuniętego oddziału po usunięciu go, ponieważ odwołanie do zdalnego oddziału zostanie dla ciebie usunięte lokalnie. Ktoś inny w Twoim zespole, który wyewidencjonował tę gałąź, nadal będzie miał to odniesienie i nadal będzie ją widział, chyba że wyczyści oddział. - pfrenssen