Jak mogę usunąć oddział Git lokalnie i zdalnie?

16948

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

Nieudane próby usunięcia zdalnego 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 powinienem zrobić inaczej, aby skutecznie usunąć remotes/origin/bugfixoddział lokalnie i zdalnie?

Matthew Rankin
źródło
1056
Uwaga moderatora: Jeśli zamierzasz odpowiedzieć na to pytanie, pamiętaj, że opublikowano już 40 odpowiedzi. Czy twoja nowa odpowiedź przyniesie jakąkolwiek znaczącą wartość?
Robert Harvey
54
Uwaga: w przypadku Git 2.5+ (drugi kwartał 2015 r.) Dokładny komunikat to „ deleted remote-tracking branch”: patrz github.com/git/git/commit/…
VonC
Możesz być zainteresowany tym skryptem, który upraszcza różnicę między usunięciem lokalnego oddziału, a zdalnym: tlbx.app/blog/delete-any-git-branch-the-easy-way
Mig
@RobertHarvey tylko 39 teraz
Adam
@Adam: 81. 42 odpowiedzi zostały usunięte z różnych powodów. Niewyjaśniona obsesja opinii publicznej na określony temat jest jedną z największych tajemnic życia.
Robert Harvey

Odpowiedzi:

21423

Streszczenie

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

Zauważ, że w większości przypadków zdalna nazwa to origin. W takim przypadku będziesz musiał użyć polecenia w ten sposób.

$ git push -d origin <branch_name>

Usuń oddział lokalny

Aby usunąć oddział lokalny, użyj jednej z następujących czynności:

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

Uwaga:-d opcja jest aliasem --delete, który tylko usuwa oddziału, jeżeli został on już całkowicie pogrążony w swym wejściowym gałęzi. Możesz także użyć -D, który jest aliasem --delete --force, który usuwa gałąź „niezależnie od jej statusu scalenia”. [Źródło: man git-branch]

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

Od wersji Git 1.7.0 można usunąć zdalną gałąź za pomocą

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

co 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 tag”.

Począwszy od wersji Git v2.8.0 , możesz także używać git pushtej -dopcji jako aliasu dla --delete.

Dlatego zainstalowana wersja Gita będzie decydować, czy należy użyć łatwiejszej, czy trudniejszej składni.

Usuń oddział zdalny [Oryginalna odpowiedź z 5-sty-2010]

Z rozdziału 3 Pro Git autorstwa Scott Chacon:

Usuwanie zdalnych oddziałów

Załóżmy, że skończysz ze zdalną gałęzią - powiedzmy, że ty i twoi współpracownicy jesteście skończeni z funkcją i połączyliście ją z gałęzią zdalną (lub jakąkolwiek gałęzią, w której znajduje się stabilna linia kodu). Możesz usunąć zdalną gałąź, używając raczej tępej składni git push [remotename] :[branch]. Jeśli chcesz usunąć gałąź server-fix z serwera, uruchom następujące czynności:

$ git push origin :serverfix
To [email protected]:schacon/simplegit.git
 - [deleted]         serverfix

Bum. Nigdy więcej oddziałów na twoim serwerze. Możesz posłuchać tej strony, ponieważ będziesz potrzebować tego polecenia i prawdopodobnie zapomnisz o składni. Sposobem na zapamiętanie tego polecenia jest przywołanie git push [remotename] [localbranch]:[remotebranch]składni, którą omówiliśmy nieco wcześniej. Jeśli odejdziesz od tej [localbranch]porcji, to w zasadzie mówisz: „Nie bierz nic po mojej stronie i spraw, żeby tak było [remotebranch]”.

Wydałem git push origin: bugfixi działało pięknie. Scott Chacon miał rację - będę chciał wyłapać ucho tej strony (lub dosłownie ucha, odpowiadając na to w przepełnieniu stosu).

Następnie powinieneś wykonać to na innych komputerach

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

propagować zmiany.

Matthew Rankin
źródło
353
Nie zapomnij zrobić git fetch --all --prunena innych komputerach po usunięciu zdalnej gałęzi na serwerze. ||| Po usunięciu gałęzi lokalnej git branch -di usunięciu gałęzi zdalnej na git push origin --deleteinnych komputerach mogą nadal występować „przestarzałe gałęzie śledzące” (do zobaczenia git branch -a). Aby się ich pozbyć, zrób to git fetch --all --prune.
Trevor Boyd Smith
14
oprócz @ TrevorBoydSmith's, git branch -aaby wyświetlić wszystkie gałęzie, możesz również użyć git branch -rdo przeglądania tylko gałęzi zdalnych. zobacz także git remote show origin- źródło: gitready.com/intermediate/2009/02/13/list-remote-branches.html
Sandra
17
Musiałem biec, git branch -D Branch_Nameaby pozbyć się lokalnego oddziału
Kanion Kolob
11
@KolobCanyon Musisz użyć -D tylko wtedy, gdy gałąź nie została połączona z inną gałęzią.
BTRUE
3
Pytanie brzmiało: „Co muszę zrobić inaczej, aby pomyślnie usunąć gałąź pilotów / pochodzenia / błędów zarówno lokalnie, jak i na GitHub?” Po uruchomieniu poleceń w zaktualizowanej odpowiedzi lokalny oddział jest nadal obecny. Byłoby miło, gdyby zaakceptowana odpowiedź była kompletną odpowiedzią. To absolutnie niesamowite, jak trudne Git wykonuje proste zadania ...
jww
3316

Odpowiedź Matthew jest świetna do usuwania odległych gałęzi i doceniam również wyjaśnienie, ale prostego rozróżnienia między tymi dwoma poleceniami:

Aby usunąć lokalny oddział z komputera:

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

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

git push origin --delete {the_remote_branch}

Odniesienie: Git: Usuń oddział (lokalny lub zdalny)

Eric Brotto
źródło
250
@megido well -Dforce usuwa, -dwyświetla ostrzeżenie, jeśli nie zostało jeszcze scalone.
TankorSmash
8
Jeśli twój lokalny oddział nie połączy się z master i nie uruchomi się, 'git branch -d your_branchto error: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'.
popełnisz
12
Sugerowałbym użycie -d zamiast -D, ponieważ jest to bezpieczniejsze. Jeśli -d nie powiedzie się z powodu niezmergowanych zatwierdzeń, musisz to ocenić, a jeśli usunięcie jest zdecydowanie OK, użyj -D.
rooby
7
Inne z klonami repozytorium, w których zostały usunięte zdalne gałęzie, powinny uruchomić git remote prune <name>(np. git remote prune origin) W celu lokalnego usunięcia starych gałęzi, które już nie istnieją w zdalnym.
code_dredd 18.04.16
3
Chciałbym dodać, że -d wyświetla 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/masterWyświetli listę wszystkich gałęzi, zarówno lokalnych, jak i zdalnych; które zostały połączone w master. Dodatkowe informacje tutaj
Eric
2040

Te krótkie odpowiedzi

Jeśli chcesz uzyskać bardziej szczegółowe objaśnienia następujących poleceń, zapoznaj się z długimi odpowiedziami w następnej sekcji.

Usuwanie zdalnego oddziału

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

Usuwanie lokalnego oddziału

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

Usuwanie lokalnego oddziału zdalnego śledzenia

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

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

Podczas usuwania oddziałów zarówno lokalnie, jak i zdalnie, należy pamiętać, że w grę wchodzą trzy różne oddziały :

  1. Lokalny oddział X.
  2. Oddział zdalnego pochodzenia X.
  3. Lokalna gałąź zdalnego śledzenia, origin/Xktóra śledzi gałąź zdalną X.

Wizualizacja trzech gałęzi

Użyto oryginalnego plakatu:

git branch -rd origin/bugfix

Który tylko usunięte jego lokalny oddział zdalnego śledzenia origin/bugfix , a nie rzeczywista zdalny oddział bugfixna origin.

Schemat 2

Aby usunąć tę rzeczywistą gałąź zdalną , potrzebujesz

git push origin --delete bugfix

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

Naciskanie w celu usunięcia zdalnych gałęzi powoduje również usunięcie zdalnych gałęzi

Zauważ, że usunięcie zdalnej gałęzi Xz wiersza poleceń za pomocą a git push spowoduje również usunięcie lokalnej gałęzi zdalnego śledzenia origin/X , więc nie jest konieczne przycinanie przestarzałej gałęzi zdalnego śledzenia za pomocą git fetch --prunelub git fetch -p. Jednak nie zaszkodzi, jeśli i tak to zrobisz.

Możesz sprawdzić, czy gałąź zdalnego śledzenia origin/Xrównież została usunięta, wykonując następujące czynności:

# 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 źródła zdalnego śledzenia / X

Jeśli nie usunąłeś swojej zdalnej gałęzi Xz wiersza poleceń (jak wyżej), twoje lokalne repozytorium nadal będzie zawierało (już nieaktualne) gałąź zdalnego śledzenia origin/X. Może się to zdarzyć, jeśli na przykład usuniesz zdalną gałąź bezpośrednio przez interfejs sieciowy GitHub.

Typowym sposobem na usunięcie tych przestarzałych gałęzi zdalnego śledzenia (od wersji Git 1.6.6) jest po prostu uruchomienie git fetchz --prunelub krótszym -p. Pamiętaj, że spowoduje to usunięcie wszystkich przestarzałych lokalnych gałęzi zdalnego śledzenia dla wszystkich gałęzi zdalnych, które już nie istnieją na pilocie :

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

Oto odpowiedni cytat z informacji o wersji 1.6.6 (moje wyróżnienie):

Wyuczono „git fetch” --all i --multipleopcje, aby uruchomić pobieranie z wielu repozytoriów oraz --pruneopcję usuwania zdalnych gałęzi śledzenia, które stały się nieaktualne. To sprawia, że ​​„git remote update” i „git remote prune” są mniej potrzebne (nie planuje się jednak usuwania „remote update” ani „remote prune”).

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

Alternatywnie, zamiast przycinać przestarzałe lokalne gałęzie zdalnego śledzenia git fetch -p, możesz uniknąć dodatkowych operacji sieciowych, po prostu ręcznie usuwając gałęzie za pomocą flag --remotelub -r:

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

Zobacz też

Peter Mortensen
źródło
Z twojej ilustracji widzę, że istnieją lokalne repozytorium klonowania i repozytorium zdalnego pochodzenia. Istnieją 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 klonowania?
huggie
6
@ huggie, to prawie poprawne. Oddziały w Git to tylko zakładki dołączone do zatwierdzeń. Tak więc na moich wykresach powyżej są Xi origin/Xzakładki w lokalnym klonie (2 gałęzie), a następnie Xna zdalnym (tworzenie 3 gałęzi).
6
+1 dla gałęzi zdalnego śledzenia. Ta gałąź powoduje problemy podczas klonowania gałęzi innej osoby. Śledzi twoje zobowiązania i pyta, czy chcesz pchnąć do oddziału tej osoby.
Kermit_ice_tea
1
Sama grafika jest złota Dobra robota.
Mogens TrasherDK
1
Ze względu na przyszłych czytelników: To, o czym mówi @Kermit_ice_tea, to gałąź lokalna (jak opisano w tej odpowiedzi), a nie gałąź zdalnego śledzenia . Gdy gałąź lokalna ma skonfigurowaną dla niej „gałąź nadrzędną”, domyślnie będzie pobierać i pchać do tej gałęzi zdalnej. Lokalny oddział , który ma „upstream oddział” ustawić na nim jest określany jako „Śledzenie branży” , więc łatwo pomylić z oddziałów zdalnego śledzenia ze względu na podobną terminologię.
David P
1520

Kroki usuwania oddziału:

Aby usunąć zdalną gałąź:

git push origin --delete <your_branch>

Aby usunąć oddział lokalny , 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!

Wystarczy zrobić git push origin --deleteaby usunąć zdalną gałąź tylko dodać nazwę oddziału na końcu i to usunie i pchnąć go do zdalnego jednocześnie ...

Ponadto, git branch -Dktóre po prostu usuwają tylko oddział lokalny ! ...

-Dstoi, dla --delete --forcektórego usunie gałąź, nawet jeśli nie jest scalona (wymuszone usunięcie), ale można również użyć, -dktóre stojaki, dla --deletektórych zgłaszany jest błąd związany ze statusem scalania gałęzi ...

Tworzę również poniższy obrazek, aby pokazać kroki:

Usuń zdalny i lokalny oddział w git

Alireza
źródło
49
git branch -awyświetli lokalne i zdalne oddziały. Pomoże Ci to przedstawić diagram.
LoranceChen
4
zwróć uwagę, że jeśli wybierasz gałąź, którą chcesz usunąć, musisz usunąć gałąź inną niż ta, którą musisz usunąć (np .: master) przed usunięciem gałęzi lokalnej.
BaDr Amer
Kiedy oddziały zostaną usunięte w momencie pochodzenia, lokalne repozytorium nie zauważy tego. Nadal będziesz mieć lokalnie buforowane wersje tych gałęzi (co jest w rzeczywistości dobre), ale git gałąź -a nadal będzie je wyświetlać jako gałęzie zdalne. Możesz wyczyścić te informacje lokalnie w następujący sposób: git remote prune originTwoje lokalne kopie usuniętych gałęzi nie są przez to usuwane. Ten sam efekt osiąga się przy użyciugit fetch --prune
vibs2006
2
Obraz jest rozpraszający i bardzo duży i nie dodaje niczego do odpowiedzi. Mam nadzieję, że nie stanie się to trendem na SO.
jmiserez
797

Możesz również użyć następujących elementów, aby usunąć zdalną gałąź

git push --delete origin serverfix

Co robi to samo co

git push origin :serverfix

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

pagetribe
źródło
1
... i bezpieczniejszy w użyciu: O
cst1992,
1
Zapomniałeś części o usunięciu lokalnego oddziału, co można zrobić przez: git branch -d <local_branch>lub git branch -D <local_branch>wymuszenie usunięcia
Amit Dash
370

Wskazówka: po usunięciu oddziałów za pomocą

git branch -d <branchname> # Deletes local branch

lub

git push origin :<branchname> # Deletes remote branch

usuwane są tylko referencje. Mimo że gałąź jest faktycznie usunięta na odległość, odwołania 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 to robią git branch -a.

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

git remote prune <repository>

Zazwyczaj tak jest git remote prune origin.

pfrenssen
źródło
14
Należy wyjaśnić, że powyższa git pushoperacja usuwa oddział lokalny i oddział zdalny.
Annika Backstrom
22
Zauważ, że git remote prunejest to nieco przestarzały sposób usuwania przestarzałych gałęzi zdalnego śledzenia, nowszym sposobem na to jest użycie git fetch --prunelub git fetch -p.
1
@RRMadhav, rzeczywiście nie zobaczysz usuniętej gałęzi po jej usunięciu, ponieważ odniesienie do zdalnej gałęzi zostanie dla ciebie usunięte lokalnie. Każdy inny członek twojego zespołu, który sprawdził ten oddział, nadal będzie miał to odniesienie i nadal je zobaczy, chyba że przycina oddział.
pfrenssen,
361

Jeśli chcesz usunąć gałąź, najpierw przejdź do innej gałęzi niż gałąź do usunięcia.

git checkout other_than_branch_to_be_deleted

Usuwanie lokalnego oddziału:

git branch -D branch_to_be_deleted

Usuwanie zdalnego oddziału:

git push origin --delete branch_to_be_deleted
Praveen Hiremath
źródło
260
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
Felipe
źródło
7
Pamiętaj, że -D wymusza usunięcie. Zawsze lepiej jest używać -d, co przypomni, jeśli musisz zrobić coś niebezpiecznego.
Jonathon Reinhart,
13
ahahah :) to zależy od ciebie: użyj -d, jeśli chcesz zobaczyć, jak płacze git lub -D, jeśli chcesz płakać.
Felipe
224

To proste: wystarczy uruchomić następujące polecenie:

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

git branch -d example

(Oto examplenazwa oddziału.)

Następnie usuń zdalną gałąź za pomocą tego polecenia:

git push origin :example
Syeful Islam
źródło
199

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łowy, piloty i tagi są dublowane na zdalnym).

imanuelcostigan
źródło
1
git push - prune origin nie zrobił dla mnie nic na gitlab: git clone git: //repo.git; git gałąź -d -r pochodzenie / niektóre gałęzie; git push - pochodzenie śliwek; daje: wszystko aktualne; Git Fetch; przywraca lokalnie usunięte oddziały; git push --mirror; teraz naprawdę ich nie ma!
eMBee
165

Używam następujących ustawień Bash :

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

Następnie możesz zadzwonić:

git-shoot branchname
crizCraig
źródło
11
Skończyło się po prostu dodanie aliasu „shoot” do mojego .gitconfig shoot = push origin --delete
hdost
Jeśli twoje pochodzenie to Skrytka Atlassiana, a gałąź jest ustawiona jako domyślna, pojawi się błąd „Domyślnie usunięcie bieżącej gałęzi jest odrzucane ...”. Musiałem zmienić domyślną gałąź w Skrytce, aby wskazywała inną gałąź, zanim będę mógł usunąć.
neoscribe
Jest to całkowicie proste, ponieważ już to zrobiłeś, ale fyi git umożliwia także tworzenie niestandardowych poleceń. Umieść git push origin --delete $1plik na swojej ścieżce o nazwie git-shooti git shoot branchnamebędzie działać.
mahemoff
132

Usuń lokalnie:

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

git branch -d <branch_name>

Aby wymusić usunięcie gałęzi, użyj -Dzamiast -d.

git branch -D <branch_name>

Usuń zdalnie:

Istnieją dwie opcje:

git push origin :branchname

git push origin --delete branchname

Sugeruję skorzystanie z drugiego sposobu, ponieważ jest on bardziej intuicyjny.

Rahul Gupta
źródło
129

Od stycznia 2013 r. GitHub zawierał Delete branch przycisk obok każdego oddziału na stronie „Oddziały”.

Odpowiedni post na blogu: Twórz i usuwaj oddziały

Nacho Coloma
źródło
3
W tym roku zacząłem używać Github, więc zastanawiałem się, dlaczego było to tak wysoko oceniane pytanie i dlaczego żadna z najlepszych odpowiedzi nie sugerowała, aby po prostu usunąć je z interfejsu internetowego Github! Ciekawe, że to tylko najnowszy dodatek.
Cam Jackson,
6
Chciałem to wskazać. Pamiętaj, że przycisk nie usunie twojego lokalnego oddziału ... zobacz, jak to zrobić: stackoverflow.com/a/10999165/901641
ArtOfWarfare
126

Jeśli chcesz wykonać oba te kroki za pomocą jednego polecenia, możesz utworzyć dla niego alias, dodając poniżej ~/.gitconfig:

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

Możesz również dodać to do swojej globalnej konfiguracji z wiersza 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 została scalona. Aby wymusić usunięcie, musisz użyć -D(wielka litera D).

Ryan Kohn
źródło
6
Właśnie tego szukałem. Mój własny alias funkcji powłoki nie działał (Nieoczekiwany EOF) i nie mogłem zrozumieć, dlaczego, ale działa świetnie! Jedyną zmianą było zastąpienie zrobiłem &&z ;tak że nawet jeśli pierwsze polecenie nie drugi będzie jeszcze wykonać (czasami tylko lokalne lub zdalne tylko istnieje).
user1021726,
115

Aby usunąć oddział lokalnie i zdalnie

  • Kasa do oddziału głównego - git checkout master

  • Usuń swój zdalny oddział - git push origin --delete <branch-name>

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

mfathy00
źródło
112

Możesz to również zrobić za pomocą git remote prune origin

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

Przycina i usuwa oddziały zdalnego śledzenia z git branch -rlisty.

nickleefly
źródło
108

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

grb delete branch

Uważam, że dość często używam również poleceń publishi track.

u2622
źródło
98

Jedno-liner polecenie, aby usunąć zarówno lokalne i zdalne :

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

Lub dodaj poniższy alias do ~ / .gitconfig . Stosowanie:git kill branch-name

[alias]
    kill = "!f(){ git branch -D \"$1\";  git push origin --delete \"$1\"; };f"
Vinnie James
źródło
17
⚠️ Używaj git branch -Dostrożnie w skrypcie, ponieważ wymusza usunięcie gałęzi bez sprawdzania, czy została scalona. Użyj, -daby być bezpiecznym.
caesarsol
94

Usuwanie oddziałów

Załóżmy, że nasza praca nad oddziałem „formularz kontaktowy” jest zakończona i już go zintegrowaliśmy z „master”. Ponieważ już go nie potrzebujemy, możemy go usunąć (lokalnie):

$ git branch -d contact-form

Aby usunąć zdalny oddział:

git push origin --delete contact-form
Ulisses Alves
źródło
87

Usuń zdalną gałąź

git push origin :<branchname>

Usuń oddział lokalny

git branch -D <branchname>

Usuń kroki lokalnego oddziału:

  1. kasa do innego oddziału
  2. usuń oddział lokalny
jayxhj
źródło
3
Czy zdalne usunięcie gałęzi wymaga później „git push”?
Samitha Chathuranga,
@SamithaChathuranga nie, git push origin :<branchname>już wypycha „pustą” gałąź do pilota (stąd usuwa gałąź zdalną)
Michał Szajbe
86

Po prostu powiedz:

git branch -d <branch-name>
git push origin :<branch-name>
piyushmandovra
źródło
Działa to, jeśli jest to twój własny oddział. Ale jeśli przycinasz wszystkie niepotrzebne gałęzie w repozytorium (niektóre z nich nie są twoje), to nie wystarczy
Kermit_ice_tea
83
git push origin --delete <branch Name>

jest łatwiejsze do zapamiętania niż

git push origin :branchName
Smila
źródło
81

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ąć

    Zmiana gałęzi

  3. Z menu „Oddział” wybierz „Cofnij publikację ...”, aby usunąć gałąź z serwerów GitHub.

    Cofnij publikację oddziału

  4. Z menu „Oddział” wybierz „Usuń” nazwa_oddziału ”...”, aby usunąć gałąź z lokalnego komputera (np. Komputer, nad którym aktualnie pracujesz)

    Usuń oddział lokalny

Eric
źródło
15
Nie głosowałem za głosem, ale myślę, że to nie pomaga. Pytanie oczywiście wymaga odpowiedzi w stylu bardziej komendowym bez konieczności korzystania z zewnętrznego programu, jeśli ludzie klikaliby tutaj, prawdopodobnie nie szukaliby githuba na komputery.
Daemedeor,
12
@Daemedeor, nie zgadzam się. W 2010 roku, kiedy OP zadał pytanie, interfejs użytkownika nie istniał, a jedyną opcją był wiersz poleceń. Aby wskazać, że chcesz tylko opcję wiersza polecenia, należy podać to w pytaniu lub w tagu interfejs wiersza poleceń , którego w tym przypadku nie ma.
Eric,
3
Polecenie git do usuwania zdalnej gałęzi jest do bani i zwykle zapominam o tym (zarówno nowym, jak i starym). Na szczęście istnieją narzędzia GUI, które mają taką opcję. Git Gui, TortoiseGit i GitHub Desktop mają to - chciałbym, żeby Git Extensions miał również tę funkcjonalność. W każdym razie pamiętam, aby uruchomić Git Gui z Git Extensions, kiedy muszę usunąć zdalną gałąź.
vezenkov
78

Aby usunąć lokalnie - (normalnie)

git branch -d my_branch

Jeśli Twój oddział jest w trakcie zmiany / scalania i nie zostało to wykonane poprawnie, oznacza to, że pojawi się błąd Rebase/Merge in progress, więc w takim przypadku nie będziesz mógł usunąć swojego oddziału.

Więc albo musisz rozwiązać zmianę zasad / scalanie. W przeciwnym razie możesz wymusić usunięcie za pomocą,

git branch -D my_branch

Aby usunąć zdalnie :

git push --delete origin my_branch

Możesz zrobić to samo, używając:

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

Reprezentacja graficzna:

Wpisz opis zdjęcia tutaj

Mohideen bin Mohammed
źródło
76

To jest bardzo proste:

Aby usunąć zdalną gałąź

git push -d origin <branch-name>

Lub

git push origin :<branch-name>

Aby usunąć oddział lokalny

git branch -D <branch-name>
Vivek Maru
źródło
2
Musiałem użyć --deletezamiast -dusunąć zdalną gałąź.
ZakJ
-dopcja jest aliasem dla --deletei jeśli --deletedziała, to -dpowinna również działać, jeśli zdecydowanie chcesz usunąć gałąź, której możesz użyć -Dzamiast -dlub --delete.
Vivek Maru,
68

To nie zadziała, jeśli masz zdalny tag o tej samej nazwie co gałąź:

$ git push origin :branch-or-tag-name
error: dst refspec branch-or-tag-name matches more than one.
error: failed to push some refs to '[email protected]:SomeName/some-repo.git'

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 byś użył:

git push origin :refs/tags/branch-or-tag-name
Greg
źródło
1
To dobrze, ale ludzie naprawdę nie powinni nazywać swoich gałęzi i tagów tą samą nazwą i tym samym schematem nazewnictwa.
3
Cóż, moim scenariuszem było przekształcenie gałęzi w tag i miało sens, aby tag miał taką samą nazwę jak gałąź. Przez konwersję mam na myśli scalenie gałęzi B do A i oznaczenie ostatniego zatwierdzenia w gałęzi B tagiem B, aby po usunięciu gałęzi B nadal można ją łatwo przywrócić, po prostu sprawdzając tag B.
Greg
53

Wiele innych odpowiedzi prowadzi do błędów / ostrzeżeń. To podejście jest dość głupie, choć może być potrzebne, git branch -D branch_to_deletejeśli nie zostanie some_other_branchna przykład w pełni scalone .

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

Zdalne czyszczenie nie jest potrzebne, jeśli usunąłeś zdalną gałąź. Służy tylko do uzyskiwania najbardziej aktualnych pilotów dostępnych w repozytorium, które śledzisz. Zauważyłem, że git fetchdodają piloty, a nie usuwają je. Oto przykład, kiedy git remote prune origincoś zrobi:

Użytkownik A wykonuje powyższe kroki. Użytkownik B uruchomiłby następujące polecenia, aby zobaczyć najbardziej aktualne zdalne gałęzie:

git fetch
git remote prune origin
git branch -r
Brandon Cook
źródło
51

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

Dodałem 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 skończę z gałęzią ( masterna przykład scaloną w ), uruchamiam w moim terminalu:

gitdelete my-branch-name

... który następnie usuwa my-branch-namez originrównie jak i lokalnie.

arthurakay
źródło
7
rozwinięcie tego --delete "$@"i -D "$@"zamiast $1obsłużyć to dla wielu gałęzi.
kunl
3
Sugeruję, git branch -daby najpierw uruchomić (z małymi literami „d”), aby upewnić się, że zmiany zostały scalone, a następnie wcisnąć, jeśli powiodło się (wstawić &&pomiędzy poleceniami)
bryn
49

Przed wykonaniem

git branch --delete <branch>

upewnij się, że najpierw określasz dokładną nazwę zdalnego oddziału, wykonując:

git ls-remote

Dzięki temu dowiesz się, co dokładnie wpisać , aby uzyskać <branch>wartość. ( branchrozróżnia małe i wielkie litery!)

jbooker
źródło
46

Posługiwać się:

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

Jeśli na pewno chcesz go usunąć, uruchom

git branch -D bugfix

Teraz, aby wyczyścić usunięte zdalne oddziały, uruchom

git remote prune origin
użytkownik
źródło