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/bugfix
oddział lokalnie i zdalnie?
git
version-control
git-branch
git-push
git-remote
Matthew Rankin
źródło
źródło
deleted remote-tracking branch
”: patrz github.com/git/git/commit/…Odpowiedzi:
Streszczenie
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.Usuń oddział lokalny
Aby usunąć oddział lokalny, użyj jednej z następujących czynności:
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ą
co może być łatwiejsze do zapamiętania niż
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 push
tej-d
opcji 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:
Wydałem
git push origin: bugfix
i 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
propagować zmiany.
źródło
git fetch --all --prune
na innych komputerach po usunięciu zdalnej gałęzi na serwerze. ||| Po usunięciu gałęzi lokalnejgit branch -d
i usunięciu gałęzi zdalnej nagit push origin --delete
innych komputerach mogą nadal występować „przestarzałe gałęzie śledzące” (do zobaczeniagit branch -a
). Aby się ich pozbyć, zrób togit fetch --all --prune
.git branch -a
aby wyświetlić wszystkie gałęzie, możesz również użyćgit branch -r
do przeglądania tylko gałęzi zdalnych. zobacz takżegit remote show origin
- źródło: gitready.com/intermediate/2009/02/13/list-remote-branches.htmlgit branch -D Branch_Name
aby pozbyć się lokalnego oddziałuOdpowiedź 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-D
zamiast 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)
źródło
-D
force usuwa,-d
wyświetla ostrzeżenie, jeśli nie zostało jeszcze scalone.'git branch -d your_branch
toerror: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'.
git remote prune <name>
(np.git remote prune origin
) W celu lokalnego usunięcia starych gałęzi, które już nie istnieją w zdalnym.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 tutajTe 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
Usuwanie lokalnego oddziału
Usuwanie lokalnego oddziału zdalnego śledzenia
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 :
X
.X
.origin/X
która śledzi gałąź zdalnąX
.Użyto oryginalnego plakatu:
Który tylko usunięte jego lokalny oddział zdalnego śledzenia
origin/bugfix
, a nie rzeczywista zdalny oddziałbugfix
naorigin
.Aby usunąć tę rzeczywistą gałąź zdalną , potrzebujesz
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
X
z wiersza poleceń za pomocą agit push
spowoduje również usunięcie lokalnej gałęzi zdalnego śledzeniaorigin/X
, więc nie jest konieczne przycinanie przestarzałej gałęzi zdalnego śledzenia za pomocągit fetch --prune
lubgit fetch -p
. Jednak nie zaszkodzi, jeśli i tak to zrobisz.Możesz sprawdzić, czy gałąź zdalnego śledzenia
origin/X
również została usunięta, wykonując następujące czynności:Przycinanie przestarzałego źródła lokalnego źródła zdalnego śledzenia / X
Jeśli nie usunąłeś swojej zdalnej gałęzi
X
z wiersza poleceń (jak wyżej), twoje lokalne repozytorium nadal będzie zawierało (już nieaktualne) gałąź zdalnego śledzeniaorigin/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 fetch
z--prune
lub 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 :Oto odpowiedni cytat z informacji o wersji 1.6.6 (moje wyróżnienie):
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--remote
lub-r
:Zobacz też
źródło
X
iorigin/X
zakładki w lokalnym klonie (2 gałęzie), a następnieX
na zdalnym (tworzenie 3 gałęzi).Kroki usuwania oddziału:
Aby usunąć zdalną gałąź:
Aby usunąć oddział lokalny , masz trzy sposoby :
Wyjaśnij: OK, po prostu wyjaśnij, co się tutaj dzieje!
Wystarczy zrobić
git push origin --delete
aby usunąć zdalną gałąź tylko dodać nazwę oddziału na końcu i to usunie i pchnąć go do zdalnego jednocześnie ...Ponadto,
git branch -D
które po prostu usuwają tylko oddział lokalny ! ...-D
stoi, dla--delete --force
którego usunie gałąź, nawet jeśli nie jest scalona (wymuszone usunięcie), ale można również użyć,-d
które stojaki, dla--delete
których zgłaszany jest błąd związany ze statusem scalania gałęzi ...Tworzę również poniższy obrazek, aby pokazać kroki:
źródło
git branch -a
wyświetli lokalne i zdalne oddziały. Pomoże Ci to przedstawić diagram.git remote prune origin
Twoje lokalne kopie usuniętych gałęzi nie są przez to usuwane. Ten sam efekt osiąga się przy użyciugit fetch --prune
Możesz również użyć następujących elementów, aby usunąć zdalną gałąź
Co robi to samo co
ale może być łatwiejsze do zapamiętania.
źródło
git branch -d <local_branch>
lubgit branch -D <local_branch>
wymuszenie usunięciaWskazówka: po usunięciu oddziałów za pomocą
lub
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
Zazwyczaj tak jest
git remote prune origin
.źródło
git push
operacja usuwa oddział lokalny i oddział zdalny.git remote prune
jest to nieco przestarzały sposób usuwania przestarzałych gałęzi zdalnego śledzenia, nowszym sposobem na to jest użyciegit fetch --prune
lubgit fetch -p
.Jeśli chcesz usunąć gałąź, najpierw przejdź do innej gałęzi niż gałąź do usunięcia.
Usuwanie lokalnego oddziału:
Usuwanie zdalnego oddziału:
źródło
źródło
-D
wymusza usunięcie. Zawsze lepiej jest używać-d
, co przypomni, jeśli musisz zrobić coś niebezpiecznego.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:
(Oto
example
nazwa oddziału.)Następnie usuń zdalną gałąź za pomocą tego polecenia:
źródło
Innym podejściem jest:
OSTRZEŻENIE: Spowoduje to usunięcie wszystkich zdalnych gałęzi, które nie istnieją lokalnie. Lub bardziej kompleksowo,
sprawi, że zdalne repozytorium będzie wyglądało jak lokalna kopia repozytorium (lokalne głowy, piloty i tagi są dublowane na zdalnym).
źródło
Używam następujących ustawień Bash :
Następnie możesz zadzwonić:
źródło
git push origin --delete $1
plik na swojej ścieżce o nazwiegit-shoot
igit shoot branchname
będzie działać.Usuń lokalnie:
Aby usunąć oddział lokalny, możesz użyć:
Aby wymusić usunięcie gałęzi, użyj
-D
zamiast-d
.Usuń zdalnie:
Istnieją dwie opcje:
Sugeruję skorzystanie z drugiego sposobu, ponieważ jest on bardziej intuicyjny.
źródło
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
źródło
Jeśli chcesz wykonać oba te kroki za pomocą jednego polecenia, możesz utworzyć dla niego alias, dodając poniżej
~/.gitconfig
:Możesz również dodać to do swojej globalnej konfiguracji z wiersza poleceń, używając
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).źródło
&&
z;
tak że nawet jeśli pierwsze polecenie nie drugi będzie jeszcze wykonać (czasami tylko lokalne lub zdalne tylko istnieje).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>
źródło
Możesz to również zrobić za pomocą
git remote prune origin
Przycina i usuwa oddziały zdalnego śledzenia z
git branch -r
listy.źródło
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ąć:
Uważam, że dość często używam również poleceń
publish
itrack
.źródło
Jedno-liner polecenie, aby usunąć zarówno lokalne i zdalne :
Lub dodaj poniższy alias do ~ / .gitconfig . Stosowanie:
git kill branch-name
źródło
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.Usuwanie oddziałów
Aby usunąć zdalny oddział:
źródło
Usuń zdalną gałąź
git push origin :<branchname>
Usuń oddział lokalny
git branch -D <branchname>
Usuń kroki lokalnego oddziału:
źródło
git push origin :<branchname>
już wypycha „pustą” gałąź do pilota (stąd usuwa gałąź zdalną)Po prostu powiedz:
źródło
jest łatwiejsze do zapamiętania niż
źródło
Teraz możesz to zrobić za pomocą aplikacji GitHub Desktop .
Po uruchomieniu aplikacji
Przejdź do gałęzi, którą chcesz usunąć
Z menu „Oddział” wybierz „Cofnij publikację ...”, aby usunąć gałąź z serwerów GitHub.
Z menu „Oddział” wybierz „Usuń” nazwa_oddziału ”...”, aby usunąć gałąź z lokalnego komputera (np. Komputer, nad którym aktualnie pracujesz)
źródło
Aby usunąć lokalnie - (normalnie)
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ą,
Aby usunąć zdalnie :
Możesz zrobić to samo, używając:
Reprezentacja graficzna:
źródło
To jest bardzo proste:
Aby usunąć zdalną gałąź
Lub
Aby usunąć oddział lokalny
źródło
--delete
zamiast-d
usunąć zdalną gałąź.-d
opcja jest aliasem dla--delete
i jeśli--delete
działa, to-d
powinna również działać, jeśli zdecydowanie chcesz usunąć gałąź, której możesz użyć-D
zamiast-d
lub--delete
.To nie zadziała, jeśli masz zdalny tag o tej samej nazwie co gałąź:
W takim przypadku musisz określić, że chcesz usunąć gałąź, a nie tag:
Podobnie, aby usunąć tag zamiast gałęzi, której byś użył:
źródło
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_delete
jeśli nie zostaniesome_other_branch
na przykład w pełni scalone .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 fetch
dodają piloty, a nie usuwają je. Oto przykład, kiedygit remote prune origin
coś zrobi:Użytkownik A wykonuje powyższe kroki. Użytkownik B uruchomiłby następujące polecenia, aby zobaczyć najbardziej aktualne zdalne gałęzie:
źródło
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:
Następnie za każdym razem, gdy skończę z gałęzią (
master
na przykład scaloną w ), uruchamiam w moim terminalu:... który następnie usuwa
my-branch-name
zorigin
równie jak i lokalnie.źródło
--delete "$@"
i-D "$@"
zamiast$1
obsłużyć to dla wielu gałęzi.git branch -d
aby 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)Przed wykonaniem
upewnij się, że najpierw określasz dokładną nazwę zdalnego oddziału, wykonując:
Dzięki temu dowiesz się, co dokładnie wpisać , aby uzyskać
<branch>
wartość. (branch
rozróżnia małe i wielkie litery!)źródło
Posługiwać się:
Jeśli na pewno chcesz go usunąć, uruchom
Teraz, aby wyczyścić usunięte zdalne oddziały, uruchom
źródło