Jak usunąć gałąź Git zarówno lokalnie, jak i zdalnie?

chcę usunąć gałąź zarówno lokalnie, jak i na zdalnym fork projektu GitHub.

nieudane próby usunięcia zdalną gałąź

$ 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 skutecznie usunąć remotes/origin/bugfix gałąź zarówno lokalnie, jak i na GitHub?


Cv

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

zauważ, że w większości przypadków usunięte nazwa origin.

Usuń Lokalną Gałąź

usuń rozmowy oddział użyć jednej z następujących opcji:

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

Uwaga:-d option-to pseudonim --delete, który usuwa tylko gałąź, jeśli była już w pełni zintegrować w swojej rosnącej gałęzi. Można również użyć -D, który jest aliasem dla --delete --force, które usuwa gałąź ", niezależnie od jej wspólnego stanu."[Źródło: man git-branch]

usuń zdalną gałąź [Aktualizacja 8-Sep-2017]

na dzień Git v1.7.0 możesz usunąć pilot przez oddział

$ 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 do Git v1.5.0 " aby usunąć zdalnej gałęzi lub etykiety."

Git v2.8.0 można również użyć git push jako alias dla --delete.

w ten sposób, wersja git, który zainstalowałeś, będzie dyktować, czy trzeba użyć bardziej prosty lub bardziej skomplikowany składnia.

usuń zdalną gałąź [oryginalny odpowiedź od 5-Jan-2010]

z rozdziału 3 Pro Git Scott Chacon:

Usuwanie Zdalnych Oddziałów

Załóżmy, że skończyliśmy zdalną gałąź-powiedzmy, że ty i twoi pracownicy skończyli z funkcją i połączyli je w główną gałąź z pilota (lub w jakiejkolwiek gałęzi swojej stabilnej linii kodowej). Możesz usunąć zdalną gałąź, za pomocą dość głupi składnia git push [remotename] :[branch]. Jeśli chcesz usunąć gałąź serverfix z serwera, wykonaj następujące kroki:

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

boom. Już nie ma gałęzi na swoim serwerze. Możesz chcieć słuchać tę stronę, bo trzeba będzie ta drużyna, i prawdopodobnie zapomnij o składni. Sposób zapamiętać tę drużynę-pamiętam git push [remotename] [localbranch]:[remotebranch] składnia, który omówiliśmy trochę wcześniej. Jeśli zostawisz [localbranch] część, to w zasadzie mówi: "nic nie brać na mojej stronie i zrób to [remotebranch]."

ja wydał git push origin :bugfix i to działa świetnie. Scott Chacon miał rację-chcę tego!--73-->pies ucha ta strona (lub prawie ucho psa, odpowiadając na to na przepełnienie stosu).

następnie należy wykonać to na innych maszynach

git fetch --all --prune

dla rozprzestrzeniania się zmian.


odpowiedź Mateusza doskonale nadaje się do usuwania pilot gałęzie, i ja również doceniam wyjaśnienie, ale prosta różnica między dwoma zespołami:

usuń lokalnego oddziału z maszyny:

git branch -d {the_local_branch} (użyć -D zamiast tego, aby skutecznie usunąć wątek bez sprawdzania wspólnego statusu)

usuń zdalny oddział od serwer:

git push origin --delete {the_remote_branch}

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


Krótkie Odpowiedzi

Jeśli potrzebujesz bardziej szczegółowe wyjaśnienia takich poleceń, patrz Długie odpowiedzi w następnym rozdziale.

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 lokalnej gałęzi:

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ź: istnieją 3 różne gałęzi, aby usunąć!

kiedy masz do czynienia z usunięciem gałęzi zarówno lokalnie, jak i zdalnie, należy pamiętać, że 3 różnych oddziałów biorących udział:

  1. lokalny oddział X.
  2. oddział zdalnego pochodzenia X.
  3. lokalny oddział zdalnego śledzenia origin/X to śledzi zdalną gałąź X.

Visualization of 3 branches

oryginalny plakat jest to

git branch -rd origin/bugfix

który tylko usunął go lokalny oddział zdalnego śledzenia origin/bugfix, a nie rzeczywista zdalna gałąź bugfix on origin.

Diagram 2

aby usunąć tę rzeczywistą zdalną gałąź musisz

git push origin --delete bugfix

Diagram 3

Dodatkowe Informacje

w poniższych sekcjach opisano dodatkowe informacje, które należy wziąć pod uwagę przy usuwaniu zdalnych i zdalnych oddziałów śledzenia.

kliknięcie, aby usunąć zdalnych gałęzi usuwa również usunięte gałęzie śledzenia

zauważ, że usuwanie zdalnej gałęzi X z wiersza polecenia za pomocą git push usunie również lokalną gałąź zdalnego śledzenia origin/X, więc nie ma potrzeby przyciąć starszej gałęzi zdalnego śledzenia za pomocą git fetch --prune lub git fetch -p choć to nie zaszkodzi, jeśli tak to zrobisz.

można sprawdzić, że gałąź zdalnego śledzenia origin/X również został usunięty, 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 nieaktualne lokalnej gałęzi zdalnego śledzenia pochodzenia/x

jeśli nie usunięto zdalną gałąź X z wiersza polecenia (jak wyżej), więc do lokalnego repo nadal będzie zawierać (teraz nieaktualne) gałąź zdalnego śledzenia origin/X. Może się to zdarzyć, jeśli usunięto zdalną gałąź bezpośrednio przez interfejs www GitHub, na przykład.

typowy sposób, aby usunąć te przestarzałe gałęzie zdalnego śledzenia (od wersji git 1.6.6) - po prostu uruchomić git fetch--prune lub mniej -p. Uwaga. co to usuwa wszystkie przestarzałe lokalne gałęzie zdalnego śledzenia dla wszystkich usuniętych gałęzi, które już nie istnieją na zdalnym:

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

oto odpowiedni cytat z 1.6.6 uwagi do wydania (wybrany przeze mnie):

" git fetch " dowiedzieć się --all a --multiple ustawienia, aby uruchomić pobieranie z wiele magazynów i --prune możliwość usunięcia zdalnego śledzenia gałęzie, które застоялись. to sprawia, że "zdalna aktualizacja Git" i " git zdalny śliwki "mniej potrzebne (nie ma planu usuwania" zdalnego aktualizacja " ani "zdalna śliwki", chociaż).

alternatywa góry automatycznego cięcia starszych gałęzi zdalnego śledzenia

alternatywnie, zamiast przycinania przestarzałych lokalnych oddziałów zdalnego śledzenia przez git fetch -p,można uniknąć zbędnej pracy w sieci po prostu ręcznie usuwając gałąź(y) za pomocą --remote lub -r flagi:

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

Cm. Również


kroki, aby usunąć gałęzie:

na usuwaniu zdalny oddział:

git push origin --delete <your_branch> 

na usuwaniu lokalnego oddziału 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śniam: ok, po prostu wyjaśnić, co tu się dzieje!

git push origin --deleteusuń zdalną gałąź tylko dodaj nazwę gałęzi w końcu, i to usunie i zachęci go do zdalnego w tym samym czasie czas...

a git branch -D, które po prostu usuwają lokalną gałąź tylko!...

-D oznacza --delete --force który usunie wątek, nawet jeśli nie jest połączona(force delete), ale można też użyć -d co oznacza --delete które wyświetlają błąd, odpowiedniego stanu scalenia oddziałów...

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

delete a remote and local branch in git


można również korzystać z następujących czynności, Aby usunąć zdalnej gałęzi.

git push --delete origin serverfix

który robi to samo jak

git push origin :serverfix

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


Jeśli chcesz usunąć gałąź, najpierw sprawdź gałąź, różniącą się od usuwanego drzewa.

git checkout other_than_branch_to_be_deleted

usuwanie lokalnej gałęzi:

git branch -D branch_to_be_deleted

usuwanie zdalnej gałęzi:

git push origin --delete branch_to_be_deleted

wskazówka: podczas usuwania gałęzi z pomocą

git branch -d <branchname>    # deletes local branch

lub

git push origin :<branchname> # deletes remote branch

usuwa tylko linki. Mimo, że gałąź faktycznie usunięty na zdalnym komputerze, linki do niej wciąż istnieją w lokalnych repozytoriach członków zespołu. Oznacza to, że dla innych członków zespołu usunięte gałęzie nadal widoczne, gdy robią git branch -a.

aby rozwiązać ten problem, członkowie zespołu mogą przyciąć usuniętych gałęzi za pomocą

git remote prune <repository>

To typowo git remote prune origin.


git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>

to proste: po prostu wykonaj następujące polecenie:

aby usunąć gałąź Git lokalnie i zdalnie, usuń najpierw lokalną gałąź za pomocą polecenia:

git branch -d example

(tutaj example nazwa oddziału)

i wtedy usunąć zdalną gałąź za pomocą polecenia:

git push origin :example

inne podejście -

git push --prune origin

ostrzeżenie: to usunie wszystkie usunięte gałęzie, które nie istnieją lokalnie. lub bardziej kompleksowo,

git push --mirror

skutecznie sprawi, że zdalnego repozytorium jak na lokalnej kopii repozytorium (lokalne głowicy, piloty i tagi lustrzane są wyświetlane na zdalnym).


używam następujący W moim Bash parametry:

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

następnie możesz zadzwonić:

git-shoot branchname

od stycznia 2013 roku GitHub włączył usuń gałąź przycisk obok każdej gałęzi na stronie" gałęzie".

odpowiedni post na blogu:tworzenie i usuwanie gałęzi


jeśli chcesz wykonać obie te czynności za pomocą jednego polecenia, można utworzyć skrót do niego, dodając do swojego ~/.gitconfig:

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

ponadto, można dodać to na swoją globalną konfigurację z poziomu wiersza polecenia, za pomocą

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

Uwaga podczas korzystania z -d (małe litery d), gałąź zostanie usunięty tylko wtedy, gdy była połączona. Aby skutecznie usunąć, trzeba będzie użyć -D (wielkie litery D).


aby usunąć gałąź lokalnie i zdalnie

  • zamówienie na master branch -git checkout master

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

  • usuń lokalną gałąź - git branch --delete <branch-name>


usuń lokalnie:

aby usunąć lokalną gałąź, można użyć:

git branch -d branch_name 

aby usunąć gałąź na siłę, użyj -D zamiast -d.

git branch -D branch_name

usunąć zdalnie:

są dwie opcje:

git push origin :branchname  

git push origin --delete branchname 

Ja bym ci proponował użyć 2-gi sposób, ponieważ jest on bardziej intuicyjny.


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

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

on przycina i usuwa gałęzie zdalnego śledzenia z git branch -r listing.


W dodatku do innych odpowiedzi, często używam git_remote_branch. Jest to dodatkowa instalacja,ale ona daje wygodny sposób komunikacji ze zdalnymi oddziałami. W tym przypadku usunąć:

grb delete branch

uważam, że używam również publish a track zespół dość często.


Usuwanie Gałęzi

załóżmy, że nasza praca nad oddziałem " contact-form "zakończona, a my już zintegrowany go w"master". Ponieważ jest nam potrzebny, możemy go usunąć (lokalnie):

$ git branch -d contact-form

i do usuwania zdalnego oddziału:

git push origin --delete contact-form

jeden liniowej polecenie usuń jak lokalny, jak i zdalny:

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

lub dodać alias w ~/.gitconfig; zastosowanie: git kill branch-name

[alias]
    kill = "!f(){ git branch -D \"\";  git push origin --delete \"\"; };f"

usuń zdalną gałąź

git push origin :<branchname>

usuń lokalną gałąź

git branch -D <branchname>

usuń kroki lokalnej gałęzi:

  1. wyjazd do innego oddziału
  2. usuń lokalną gałąź

po prostu powiedzieć:

git branch -d <branch-name>
git push origin :<branch-name>

teraz możesz zrobić to za pomocą GitHub Desktop app.

po uruchomieniu aplikacji

  1. kliknij na projekt, zawierający oddziału
  2. przełączyć się na gałąź, którą chcesz usunąć switching branch
  3. w menu "oddział", "wybierz", "anuluj publikację..."aby gałąź została usunięta z serwera GitHub. unpublish branch
  4. w menu "gałąź", wybierz " Usuń "branch_name"...'aby gałąź został usunięty z lokalnej maszyny (ona jest na tej samej maszynie, na której aktualnie pracujesz) delete local branch

usuń lokalnie (normalny),

git branch -d my_branch

jeśli twoja gałąź w procesie relokacji / scalania i to nie było wykonane prawidłowo, otrzymasz komunikat o błędzie Rebase/Merge in progress tak, że w tym przypadku, nie można usunąć swój oddział.

więc albo twoja potrzeba rozwiązać relokacja / korespondencja seryjna w przeciwnym razie można zrobić force Delete z pomocą,

git branch -D my_branch

usuń w Remote:

git push --delete origin my_branch

można zrobić to samo przez ,

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

Graficzne Przedstawienie,

enter image description here


git push origin --delete branchName

łatwiejsze do zapamiętania, niż

git push origin :branchName

To nie będzie działać, jeśli masz tag z tej samej nazwie, jak gałąź 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 '[email protected]:SomeName/some-repo.git'

W tym przypadku należy określić, że chcesz usunąć gałąź, a nie znacznik:

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

podobnie, aby usunąć znacznik zamiast gałęzie, by użył:

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

mam dość szukania informacji w necie do tej odpowiedzi, dlatego podjąłem podobne podejście odpowiedź, który opublikował crizCraig wcześniej.

dodano następujący w mój profil Bash:

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

następnie za każdym razem, gdy kończę z gałęzią (łączony w master, na przykład) uruchamiam w swoim terminalu następujący:

gitdelete my-branch-name

...który następnie usuwa my-branch-nameorigin, a także lokalnie.


wiele innych odpowiedzi doprowadzą do błędów / ostrzeżeń. To podejście jest stosunkowo głupi dowodem, choć nadal może być konieczne git branch -D branch_to_delete jeśli nie jest całkowicie połączony w some_other_branch, na przykład.

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

Zdalna przycinanie nie jest konieczne, jeśli usunięto zdalną gałąź. Jest on używany tylko w celu uzyskania najbardziej zaawansowanych pilotów zdalnego sterowania, dostępnych w repo, które śledzisz. Zauważyłem git fetch doda piloty, a nie usuwa ich. Oto przykład tego, kiedy git remote prune origin faktycznie będzie robić coś:

użytkownik A czyni kroki. Użytkownik B będzie uruchomić następujące polecenia, aby zobaczyć najnowsze usunięte gałęzie

git fetch
git remote prune origin
git branch -r

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

Jeśli jesteś pewny, że chcesz usunąć go, wykonaj polecenie

git branch -D bugfix

Teraz, aby wyczyścić usunięte usunięte gałęzie run

git remote prune origin

przed wykonaniem

git branch --delete <branch>

upewnij się, że najpierw określamy dokładną nazwę zdalnej gałęzi, wykonując:

git ls-remote

to powie ci, że to właśnie wprowadzenie do <branch> wartość. (branch jest wrażliwe na wielkość liter!)


Mashup wszystkich innych odpowiedzi. Wymagane Ruby 1.9.3+, przetestowano tylko na OS X.

otwórz plik git-remove zrób go wykonywalnym i umieść go na swój sposób. Następnie użyj np.git remove temp.

#!/usr/bin/env ruby
require 'io/console'

if __FILE__ == 
      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