Wie lösche ich einen Git-Zweig lokal und remote?


16955

Ich möchte einen Zweig sowohl lokal als auch remote löschen.

Fehlgeschlagene Versuche, einen Remote-Zweig zu löschen

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

Was kann ich anders machen, um den remotes/origin/bugfixZweig sowohl lokal als auch remote erfolgreich zu löschen ?


1057
Anmerkung des Moderators: Wenn Sie diese Frage beantworten möchten, beachten Sie, dass bereits 40 Antworten veröffentlicht wurden. Wird Ihre neue Antwort einen wesentlichen Mehrwert bringen?
Robert Harvey

54
Hinweis: Für Git 2.5+ (Q2 2015) lautet die genaue Meldung " deleted remote-tracking branch": siehe github.com/git/git/commit/…
VonC

Möglicherweise interessiert Sie dieses Skript, das den Unterschied zwischen dem Löschen eines lokalen und eines Remote-Zweigs vereinfacht: tlbx.app/blog/delete-any-git-branch-the-easy-way
Mig

@ RobertHarvey nur 39 jetzt
Adam

@Adam: 81. 42 Antworten wurden aus verschiedenen Gründen gelöscht. Die ungeklärte Besessenheit der Öffentlichkeit von einem bestimmten Thema ist eines der größten Geheimnisse des Lebens.
Robert Harvey

Antworten:


21428

Zusammenfassung

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

Beachten Sie, dass in den meisten Fällen der Remote-Name lautet origin. In einem solchen Fall müssen Sie den Befehl wie folgt verwenden.

$ git push -d origin <branch_name>

Lokalen Zweig löschen

Verwenden Sie eine der folgenden Methoden, um den lokalen Zweig zu löschen :

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

Hinweis: Die -dOption ist ein Alias ​​für --delete, der den Zweig nur löscht, wenn er bereits vollständig in seinem vorgelagerten Zweig zusammengeführt wurde. Sie können auch -Deinen Alias ​​für verwenden --delete --force, der den Zweig "unabhängig von seinem zusammengeführten Status" löscht. [Quelle: man git-branch]

Remote-Zweig löschen [Aktualisiert am 8. September 2017]

Ab Git v1.7.0 können Sie einen Remote- Zweig mit löschen

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

das könnte leichter zu merken sein als

$ git push <remote_name> :<branch_name>

Dies wurde in Git v1.5.0 hinzugefügt, "um einen Remote-Zweig oder ein Tag zu löschen."

Ab Git v2.8.0 können Sie git pushdie -dOption auch als Alias ​​für verwenden --delete.

Daher bestimmt die von Ihnen installierte Git-Version, ob Sie die einfachere oder schwierigere Syntax verwenden müssen.

Remote-Zweig löschen [Ursprüngliche Antwort vom 5. Januar 2010]

Aus Kapitel 3 von Pro Git von Scott Chacon:

Remote-Zweige löschen

Angenommen, Sie sind mit einer Remote-Verzweigung fertig - sagen wir, Sie und Ihre Mitarbeiter sind mit einer Funktion fertig und haben sie in der Hauptniederlassung Ihrer Remote (oder in der Verzweigung, in der sich Ihre stabile Codezeile befindet) zusammengeführt. Sie können einen Remote-Zweig mit der eher stumpfen Syntax löschen git push [remotename] :[branch]. Wenn Sie Ihren Server-Fix-Zweig vom Server löschen möchten, führen Sie Folgendes aus:

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

Boom. Keine Zweige mehr auf Ihrem Server. Möglicherweise möchten Sie diese Seite lesen, da Sie diesen Befehl benötigen und wahrscheinlich die Syntax vergessen werden. Eine Möglichkeit, sich an diesen Befehl zu erinnern, besteht darin, die git push [remotename] [localbranch]:[remotebranch]Syntax abzurufen, die wir etwas früher besprochen haben. Wenn Sie die [localbranch]Portion weglassen, sagen Sie im Grunde: "Nehmen Sie nichts auf meine Seite und lassen Sie es sein [remotebranch]."

Ich habe ausgestellt git push origin: bugfixund es hat wunderbar funktioniert. Scott Chacon hatte Recht - ich möchte diese Seite mit einem Ohr versehen (oder praktisch ein Ohr, indem ich dies auf Stack Overflow beantworte).

Dann sollten Sie dies auf anderen Maschinen ausführen

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

Veränderungen zu verbreiten.


353
Vergessen Sie nicht, git fetch --all --pruneauf anderen Computern einen Vorgang auszuführen, nachdem Sie den Remote-Zweig auf dem Server gelöscht haben. ||| Nach dem Löschen des lokalen Zweigs mit git branch -dund des Löschens des Remote-Zweigs mit git push origin --deleteanderen Computern sind möglicherweise noch "veraltete Verfolgungszweige" vorhanden (um dies zu sehen git branch -a). Um diese loszuwerden, tun Sie git fetch --all --prune.
Trevor Boyd Smith

14
Zusätzlich zu @ TrevorBoydSmiths git branch -azum Anzeigen aller Zweige können Sie auch git branch -rnur entfernte Zweige anzeigen. siehe auch git remote show origin- Quelle: gitready.com/intermediate/2009/02/13/list-remote-branches.html
Sandra

17
Ich musste rennen git branch -D Branch_Name, um den örtlichen Zweig loszuwerden
Kolob Canyon

11
@KolobCanyon Sie müssen -D nur verwenden, wenn der Zweig nicht mit einem anderen Zweig zusammengeführt wurde.
BTRUE

3
Die Frage war: "Was muss ich anders machen, um den Zweig remotes / origin / bugfix sowohl lokal als auch auf GitHub erfolgreich zu löschen?" Nachdem Sie die Befehle in Ihrer aktualisierten Antwort ausgeführt haben, ist der lokale Zweig weiterhin vorhanden. Es wäre schön, wenn die akzeptierte Antwort eine vollständige Antwort wäre. Es ist absolut erstaunlich, wie schwierig Git einfache Aufgaben macht ...
jww

3316

Matthews Antwort ist großartig, um entfernte Zweige zu entfernen, und ich schätze auch die Erklärung, aber um eine einfache Unterscheidung zwischen den beiden Befehlen zu treffen:

So entfernen Sie einen lokalen Zweig von Ihrem Computer:

git branch -d {the_local_branch}(Verwenden Sie -Dstattdessen, um das Löschen des Zweigs zu erzwingen, ohne den zusammengeführten Status zu überprüfen.)

So entfernen Sie einen Remote-Zweig vom Server:

git push origin --delete {the_remote_branch}

Referenz: Git: Lösche einen Zweig (lokal oder remote)


250
@ Megido gut -Derzwingen löscht, -dgibt Ihnen eine Warnung, wenn es nicht bereits zusammengeführt wurde.
TankorSmash

8
Wenn Ihre lokale Niederlassung nicht mit Master zusammengeführt und ausgeführt 'git branch -d your_branchwird, werden Sie Fehler wieerror: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'.
Geeks

12
Ich würde vorschlagen, -d anstelle von -D zu verwenden, da dies sicherer ist. Wenn -d aufgrund nicht zusammengeführter Commits fehlschlägt, müssen Sie dies bewerten. Wenn das Entfernen definitiv in Ordnung ist, verwenden Sie -D.
Rooby

7
Andere mit Repository-Klonen, bei denen entfernte Zweige entfernt wurden, sollten ausgeführt werden git remote prune <name>(z. B. git remote prune origin), um veraltete Zweige, die nicht mehr auf dem entfernten vorhanden sind, lokal zu entfernen.
code_dredd

3
Ich möchte hinzufügen, dass -d eine Warnung ausgibt, wenn es nicht mit dem aktuellen HEAD zusammengeführt wird. Wenn Sie Klarheit benötigen, empfehle ich diesen Befehl. git branch -a --merged origin/masterEr listet alle lokalen und Remote-Zweige auf. das wurden in master zusammengeführt. Zusätzliche Informationen hier
Eric

2041

Die kurzen Antworten

Wenn Sie detailliertere Erläuterungen zu den folgenden Befehlen wünschen, lesen Sie die langen Antworten im nächsten Abschnitt.

Remote-Zweig löschen

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

Lokalen Zweig löschen

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

Löschen eines lokalen Remote-Tracking-Zweigs

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

Die lange Antwort : Es gibt drei verschiedene Zweige zum Löschen!

Beachten Sie beim Löschen von Zweigen sowohl lokal als auch remote, dass drei verschiedene Zweige betroffen sind :

  1. Die lokale Niederlassung X.
  2. Der Zweig des entfernten Ursprungs X.
  3. Der lokale Remote-Tracking-Zweig origin/X, der den Remote-Zweig verfolgt X.

Visualisierung von drei Zweigen

Das verwendete Originalplakat:

git branch -rd origin/bugfix

Welche gelöscht nur seine lokale Fernverfolgung Zweig origin/bugfix , und nicht der eigentliche Fern Zweig bugfixauf origin.

Abbildung 2

Um diesen eigentlichen Remote-Zweig zu löschen, benötigen Sie

git push origin --delete bugfix

Abbildung 3

Zusätzliche Details

In den folgenden Abschnitten werden zusätzliche Details beschrieben, die beim Löschen Ihrer Remote- und Remote-Tracking-Zweige zu berücksichtigen sind.

Durch Drücken zum Löschen von Remote-Zweigen werden auch Remote-Tracking-Zweige entfernt

Beachten Sie, dass durch das Löschen des Remote-Zweigs Xvon der Befehlszeile mit a git push auch der lokale Remote-Tracking-Zweig entfernt origin/X wird. Daher ist es nicht erforderlich, den veralteten Remote-Tracking-Zweig mit git fetch --pruneoder zu bereinigen git fetch -p. Es würde jedoch nicht schaden, wenn Sie es trotzdem tun würden.

Sie können überprüfen, ob der Remote-Tracking-Zweig origin/Xauch gelöscht wurde, indem Sie Folgendes ausführen:

# 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

Bereinigen des veralteten lokalen Remote-Tracking-Zweigursprungs / X.

Wenn Sie Ihren Remote-Zweig nicht Xüber die Befehlszeile gelöscht haben (wie oben), enthält Ihr lokales Repository weiterhin einen (inzwischen veralteten) Remote-Tracking-Zweig origin/X. Dies kann beispielsweise passieren, wenn Sie einen Remote-Zweig direkt über die GitHub-Weboberfläche gelöscht haben.

Eine typische Möglichkeit, diese veralteten Remote-Tracking-Zweige (seit Git Version 1.6.6) zu entfernen, besteht darin, sie einfach git fetchmit --pruneoder kürzer auszuführen -p. Beachten Sie, dass dadurch alle veralteten lokalen Remote-Tracking-Zweige für alle Remote-Zweige entfernt werden, die auf der Remote nicht mehr vorhanden sind :

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

Hier ist das relevante Zitat aus den Versionshinweisen zu 1.6.6 (Schwerpunkt Mine):

"git fetch" gelernt --all und --multipleOptionen, um Fetch aus vielen Repositorys auszuführen, und --pruneOption, um veraltete Remote-Tracking-Zweige zu entfernen. Diese machen "git remote update" und "git remote prune" weniger notwendig (es ist jedoch nicht geplant, "remote update" oder "remote prune" zu entfernen).

Alternative zum oben genannten automatischen Bereinigen für veraltete Fernverfolgungszweige

Alternativ kann anstelle die veralteten lokalen Fernverfolgung Zweig durch Beschneiden git fetch -p, können Sie machen den zusätzlichen Netzwerkbetrieb vermeiden , indem nur manuell die Branche (n) mit den zu entfernen --remoteoder -rFahnen:

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

Siehe auch


Aus Ihrer Abbildung kann ich ersehen, dass es ein lokales Klon-Repo und ein Remote-Ursprungs-Repo gibt. Es gibt also mindestens zwei physische Zweige. Wo ist der dritte zu löschende Zweig? Ist der dritte Zweig nur ein Zeiger, der auf ein Commit im lokalen Klon-Repo zeigt?
Huggie

6
@huggie das ist ziemlich richtig. Zweige in Git sind nur Lesezeichen, die an Commits angehängt sind. Also in meinem Graphen oben gibt es Xund origin/XLesezeichen im lokalen Klon (2 Filialen), und dann gibt es Xauf der Fernbedienung (Herstellung 3 Filialen).

6
+1 für den Fernverfolgungszweig. Dieser Zweig verursacht Probleme, wenn Sie den Zweig eines anderen klonen. Es verfolgt weiterhin Ihre Commits und fragt Sie, ob Sie in die Filiale dieser Person wechseln möchten.
Kermit_ice_tea

1
Die Grafiken allein sind Gold Gut gemacht.
Mogens TrasherDK

1
Für zukünftige Leser: Bei @Kermit_ice_tea handelt es sich um einen lokalen Zweig (wie in dieser Antwort beschrieben), nicht um einen Remote-Tracking-Zweig . Wenn für einen lokalen Zweig ein "Upstream-Zweig" konfiguriert ist, wird standardmäßig von diesem Remote-Zweig gezogen und auf diesen verschoben. Ein lokaler Zweig , der einen „upstream Zweig“ gesetzt auf sie wird als „Tracking Zweig“ bezeichnet , so dass es mit leicht zu verwechseln ist Fernverfolgung Zweig aufgrund der ähnlichen Terminologie.
David P

1520

Schritte zum Löschen eines Zweigs:

So löschen Sie den Remote-Zweig:

git push origin --delete <your_branch>

Zum Löschen des lokalen Zweigs haben Sie drei Möglichkeiten :

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

Erklären Sie: OK, erklären Sie einfach, was hier los ist!

Einfach tun , git push origin --deleteum Ihren Remote - Zweig löscht nur den Namen der Branche am Ende hinzufügen , und dies wird löschen und schieben Sie es auf Remote zugleich ...

Auch git branch -D, die einfach die lokale Niederlassung löschen nur ! ...

-Dsteht für, --delete --forcewodurch der Zweig gelöscht wird, auch wenn er nicht zusammengeführt wurde (Löschen erzwingen). Sie können jedoch auch verwenden -d, für --deletewelche Stände ein Fehler bezüglich des Status der Zweigzusammenführung ausgegeben wird ...

Ich erstelle auch das Bild unten , um die Schritte zu zeigen:

Löschen Sie einen entfernten und lokalen Zweig in git


49
git branch -azeigt lokale und entfernte Zweige an. Es wird Ihnen helfen, das Diagramm einzuführen.
LoranceChen

4
Beachten Sie, dass Sie beim Festlegen des zu löschenden Zweigs einen anderen als den zu löschenden Zweig (z. B. master) auschecken müssen, bevor Sie den lokalen Zweig löschen.
BaDr Amer

Wenn Zweige beim Ursprung gelöscht werden, wird Ihr lokales Repository dies nicht beachten. Sie haben immer noch Ihre lokal zwischengespeicherten Versionen dieser Zweige (was eigentlich gut ist), aber Git-Zweig -a listet sie weiterhin als entfernte Zweige auf. Sie können diese Informationen lokal folgendermaßen bereinigen: git remote prune originIhre lokalen Kopien gelöschter Zweige werden dadurch nicht entfernt. Der gleiche Effekt wird durch die Verwendung vongit fetch --prune
vibs2006

2
Das Bild ist ablenkend und sehr groß und fügt der Antwort nichts hinzu. Ich hoffe, dass dies bei SO kein Trend wird.
Jmiserez

797

Sie können den Remote-Zweig auch wie folgt löschen

git push --delete origin serverfix

Welches macht das gleiche wie

git push origin :serverfix

aber es kann einfacher sein, sich zu erinnern.


1
... und sicherer zu bedienen: O
cst1992

1
Sie haben den Teil über das Löschen des lokalen Zweigs vergessen, der durchgeführt werden kann durch: git branch -d <local_branch>oder git branch -D <local_branch>zum erzwungenen Löschen
Amit Dash

370

Tipp: Wenn Sie Zweige mit löschen

git branch -d <branchname> # Deletes local branch

oder

git push origin :<branchname> # Deletes remote branch

Nur die Referenzen werden gelöscht. Obwohl der Zweig tatsächlich auf der Fernbedienung entfernt wurde, sind die Verweise darauf in den lokalen Repositorys Ihrer Teammitglieder vorhanden. Dies bedeutet, dass für andere Teammitglieder die gelöschten Zweige weiterhin sichtbar sind, wenn sie a git branch -a.

Um dies zu lösen, können Ihre Teammitglieder die gelöschten Zweige mit beschneiden

git remote prune <repository>

Dies ist typisch git remote prune origin.


14
Sie sollten klarstellen, dass der obige git pushVorgang den lokalen Zweig und den Remote-Zweig löscht .
Annika Backstrom

22
Beachten Sie, dass dies git remote pruneeine etwas veraltete Methode zum Entfernen veralteter Remote-Tracking-Zweige ist. Die neuere Methode ist die Verwendung von git fetch --pruneoder git fetch -p.

1
@RRMadhav, tatsächlich wird der gelöschte Zweig nach dem Löschen nicht angezeigt, da der Verweis auf den Remote-Zweig lokal für Sie entfernt wird. Alle anderen Mitglieder Ihres Teams, die diesen Zweig ausgecheckt haben, haben diesen Verweis weiterhin und sehen ihn weiterhin, es sei denn, sie beschneiden den Zweig.
Pfrenssen

361

Wenn Sie einen Zweig löschen möchten, checken Sie zuerst in den anderen Zweig als den zu löschenden Zweig aus.

git checkout other_than_branch_to_be_deleted

Löschen des lokalen Zweigs:

git branch -D branch_to_be_deleted

Remote-Zweig löschen:

git push origin --delete branch_to_be_deleted

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

7
Beachten Sie, dass -D Kräfte die Löschung. Es ist immer besser zu verwenden -d, was Sie daran erinnert, wenn Sie etwas Gefährliches tun müssen.
Jonathon Reinhart

13
ahahah :) es liegt an dir: benutze -d wenn du git weinen sehen willst oder -D wenn du weinen willst.
Felipe

224

Dies ist einfach: Führen Sie einfach den folgenden Befehl aus:

Um einen Git-Zweig sowohl lokal als auch remote zu löschen, löschen Sie zuerst den lokalen Zweig mit diesem Befehl:

git branch -d example

(Hier exampleist der Filialname.)

Löschen Sie anschließend den Remote-Zweig mit diesem Befehl:

git push origin :example

199

Ein anderer Ansatz ist:

git push --prune origin

WARNUNG: Dadurch werden alle Remote-Zweige gelöscht, die lokal nicht vorhanden sind. Oder umfassender,

git push --mirror

Das Remote-Repository sieht effektiv wie die lokale Kopie des Repositorys aus (lokale Köpfe, Fernbedienungen und Tags werden auf dem Remote-Repository gespiegelt).


1
git push --prune origin hat auf gitlab nichts für mich getan: git clone git: //repo.git; Git-Zweig -d -r Ursprung / einige Zweige; Git Push - Prune Herkunft; Erträge: Alles aktuell; Git holen; bringt lokal gelöschte Zweige zurück; Git Push - Spiegel; jetzt sind sie wirklich weg!
eMBee

165

Ich verwende Folgendes in meinen Bash- Einstellungen:

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

Dann können Sie anrufen:

git-shoot branchname

11
Am Ende habe ich einfach den Alias ​​"shot" in meine .gitconfig shot = push origin --delete
hdost

Wenn Ihr Ursprung ein Atlassian Stash ist und der Zweig als Standard festgelegt ist, wird die Fehlermeldung "Standardmäßig wird das Löschen des aktuellen Zweigs verweigert ..." angezeigt. Ich musste den Standardzweig in Stash ändern, um auf einen anderen Zweig zu verweisen, bevor ich ihn löschen konnte.
neoscribe

Dies ist ganz einfach, aber mit fyi git können Sie auch benutzerdefinierte Befehle erstellen. Fügen Sie git push origin --delete $1eine Datei in Ihren Pfad ein, die aufgerufen wird git-shootund git shoot branchnameauch funktioniert.
Mahemoff

132

Lokal löschen:

Um einen lokalen Zweig zu löschen, können Sie Folgendes verwenden:

git branch -d <branch_name>

Verwenden Sie -Danstelle von, um einen Zweig zwangsweise zu löschen -d.

git branch -D <branch_name>

Remote löschen:

Es gibt zwei Möglichkeiten:

git push origin :branchname

git push origin --delete branchname

Ich würde vorschlagen, dass Sie den zweiten Weg verwenden, da er intuitiver ist.


129

Seit Januar 2013 hat GitHub Delete branchauf Ihrer Seite "Zweige" neben jedem Zweig eine Schaltfläche eingefügt.

Relevanter Blog-Beitrag: Zweige erstellen und löschen


3
Ich habe erst in diesem Jahr angefangen, Github zu verwenden, also habe ich mich gefragt, warum dies eine so hoch bewertete Frage ist und warum keine der Top-Antworten vorschlägt, sie einfach von der Github-Weboberfläche zu löschen! Interessant, dass es nur eine neue Ergänzung ist.
Cam Jackson

6
Ich wollte darauf hinweisen. Beachten Sie, dass die Schaltfläche Ihren lokalen Zweig nicht löscht. Informationen dazu finden
ArtOfWarfare

126

Wenn Sie beide Schritte mit einem einzigen Befehl ausführen möchten, können Sie einen Alias ​​dafür erstellen, indem Sie Folgendes zu Ihrem hinzufügen ~/.gitconfig:

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

Alternativ können Sie dies über die Befehlszeile mit zu Ihrer globalen Konfiguration hinzufügen

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

HINWEIS : Bei Verwendung von -d(Kleinbuchstabe d) wird der Zweig nur gelöscht, wenn er zusammengeführt wurde. Um das Löschen zu erzwingen, müssen Sie -D(Großbuchstabe D) verwenden.


6
Das habe ich gesucht. Mein eigener Shell-Funktionsalias hat nicht funktioniert (Unerwartetes EOF) und ich konnte nicht herausfinden, warum, aber das funktioniert großartig! Die einzige Änderung, die ich vorgenommen habe, war das Ersetzen &&durch, ;sodass der zweite Befehl auch dann ausgeführt wird, wenn der erste Befehl fehlschlägt (manchmal ist nur lokal oder nur remote vorhanden).
user1021726

115

So löschen Sie Ihre Filiale lokal und remote

  • Kasse zum Hauptzweig - git checkout master

  • Löschen Sie Ihren Remote-Zweig - git push origin --delete <branch-name>

  • Löschen Sie Ihre lokale Niederlassung - git branch --delete <branch-name>


112

Sie können dies auch mit tun git remote prune origin

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

Remote-Tracking-Zweige werden aus einer git branch -rListe entfernt und gelöscht .


108

Zusätzlich zu den anderen Antworten verwende ich häufig das Tool git_remote_branch . Es ist eine zusätzliche Installation, bietet Ihnen jedoch eine bequeme Möglichkeit, mit Remote-Zweigen zu interagieren. In diesem Fall zum Löschen:

grb delete branch

Ich finde, dass ich die Befehle publishund auch trackziemlich oft benutze .


98

Ein einzeiliger Befehl zum Löschen sowohl lokaler als auch entfernter Dateien :

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

Oder fügen Sie den folgenden Alias ​​zu Ihrer ~ / .gitconfig hinzu . Verwendungszweck:git kill branch-name

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

17
⚠️ Gehen Sie git branch -Din einem Skript vorsichtig vor, da ein Zweig zwangsweise gelöscht wird , ohne zu überprüfen, ob er zusammengeführt wurde. Verwenden Sie -d, um sicher zu sein.
Caesarsol

94

Zweige löschen

Nehmen wir an, unsere Arbeit am Zweig "Kontaktformular" ist abgeschlossen und wir haben es bereits in "Master" integriert. Da wir es nicht mehr brauchen, können wir es (lokal) löschen:

$ git branch -d contact-form

Und zum Löschen des Remote-Zweigs:

git push origin --delete contact-form

87

Remote-Zweig löschen

git push origin :<branchname>

Lokalen Zweig löschen

git branch -D <branchname>

Lokale Verzweigungsschritte löschen:

  1. Kasse zu einer anderen Filiale
  2. lokalen Zweig löschen

3
Erfordert das Löschen des Remote-Zweigs anschließend "git push"?
Samitha Chathuranga

@SamithaChathuranga nein, git push origin :<branchname>schiebt bereits einen 'leeren' Zweig zur Fernbedienung (löscht daher die entfernte Verzweigung)
Michał Szajbe

86

Sagen Sie einfach:

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

Dies funktioniert, wenn es sich um eine eigene Niederlassung handelt. Aber wenn Sie alle nicht benötigten Zweige im Repo beschneiden (von denen einige nicht Ihre sind), würde dies nicht ausreichen
Kermit_ice_tea

83
git push origin --delete <branch Name>

ist leichter zu merken als

git push origin :branchName

81

Jetzt können Sie dies mit der GitHub Desktop- Anwendung tun .

Nach dem Start der Anwendung

  1. Klicken Sie auf das Projekt mit dem Zweig
  2. Wechseln Sie zu dem Zweig, den Sie löschen möchten

    Zweig wechseln

  3. Wählen Sie im Menü "Zweig" die Option "Veröffentlichung aufheben ...", um den Zweig von den GitHub-Servern zu löschen.

    Zweig nicht veröffentlichen

  4. Wählen Sie im Menü "Zweig" die Option "Zweigstellenname löschen" ... ", damit der Zweig von Ihrem lokalen Computer gelöscht wird (AKA der Computer, an dem Sie gerade arbeiten).

    Lokalen Zweig löschen


15
Ich habe nicht abgelehnt, aber ich denke, dass es nicht wesentlich hilft. Die Frage lautet offensichtlich nach einer Antwort mit mehr Befehlszeilen, ohne ein externes Programm verwenden zu müssen. Wenn Leute hier klicken, werden sie wahrscheinlich nicht nach einem Github für Desktop-Methoden suchen.
Daemedeor

12
@Daemedeor, ich bin anderer Meinung. Im Jahr 2010, als das OP die Frage stellte, gab es keine UI-Methode und die einzige Option war die Befehlszeile. Um anzuzeigen, dass Sie nur eine Befehlszeilenoption wünschen, sollte diese in der Frage oder mit dem Tag Befehlszeilenschnittstelle angegeben werden , das in diesem Fall nicht vorhanden ist.
Eric

3
Der Befehl git zum Löschen eines Remote-Zweigs ist zum Kotzen und ich vergesse ihn häufig (sowohl neu als auch alt). Glücklicherweise gibt es GUI-Tools, die die Option haben. Git Gui, TortoiseGit und GitHub Desktop haben es - ich wünschte, Git Extensions hätte auch diese Funktionalität. Ich erinnere mich jedenfalls daran, Git Gui in Git Extensions zu starten, wenn ich einen Remote-Zweig löschen muss.
Vezenkov

81

Es ist sehr einfach:

So löschen Sie den Remote-Zweig

git push -d origin <branch-name>

Oder

git push origin :<branch-name>

Lokalen Zweig löschen

git branch -D <branch-name>

2
Ich musste verwenden, --deleteanstatt -dRemote-Zweig zu löschen.
ZakJ

-dOption ist ein Alias ​​für --deleteund wenn --deleteArbeit dann -dauch funktionieren sollte, wenn Sie einen Zweig zwangsweise löschen möchten, können Sie -Danstelle von -doder verwenden --delete.
Vivek Maru

78

Lokal löschen - (normal)

git branch -d my_branch

Wenn sich Ihre Niederlassung in einem Umbasierungs- / Zusammenführungsvorgang befindet und dies nicht ordnungsgemäß durchgeführt wurde, bedeutet dies, dass Sie eine Fehlermeldung erhalten. Rebase/Merge in progress In diesem Fall können Sie Ihren Zweig also nicht löschen.

Entweder müssen Sie das Umbasieren / Zusammenführen lösen. Andernfalls können Sie das Löschen erzwingen, indem Sie Folgendes verwenden:

git branch -D my_branch

So löschen Sie in der Ferne :

git push --delete origin my_branch

Sie können dasselbe tun mit:

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

Grafische Darstellung:

Geben Sie hier die Bildbeschreibung ein


68

Dies funktioniert nicht, wenn Sie ein Tag mit demselben Namen wie der Zweig auf der Fernbedienung haben:

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

In diesem Fall müssen Sie angeben, dass Sie den Zweig und nicht das Tag löschen möchten:

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

Um das Tag anstelle des Zweigs zu löschen, würden Sie ebenfalls Folgendes verwenden:

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

1
Das ist in Ordnung, aber die Leute sollten ihre Zweige und Tags überhaupt nicht mit demselben Namen und demselben Namensschema benennen.

3
Mein Szenario war, dass ich einen Zweig in ein Tag konvertierte und es sinnvoll war, dass das Tag denselben Namen wie der Zweig hatte. Mit Konvertieren meine ich das Zusammenführen von Zweig B mit A und das Markieren des letzten Commits in Zweig B mit Tag B, so dass es nach dem Löschen von Zweig B immer noch einfach wiederhergestellt werden kann, indem einfach Tag B ausgecheckt wird.
Greg

53

Viele der anderen Antworten führen zu Fehlern / Warnungen. Dieser Ansatz ist relativ narrensicher, obwohl Sie ihn möglicherweise noch benötigen, git branch -D branch_to_deletewenn er beispielsweise nicht vollständig zusammengeführt some_other_branchist.

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

Remote-Bereinigung ist nicht erforderlich, wenn Sie den Remote-Zweig gelöscht haben. Es wird nur verwendet, um die aktuellsten Fernbedienungen in einem Repository abzurufen, das Sie verfolgen. Ich habe beobachtet git fetch, dass Fernbedienungen hinzugefügt und nicht entfernt werden. Hier ist ein Beispiel dafür, wann git remote prune origintatsächlich etwas getan wird:

Benutzer A führt die obigen Schritte aus. Benutzer B würde die folgenden Befehle ausführen, um die aktuellsten Remote-Zweige anzuzeigen:

git fetch
git remote prune origin
git branch -r

51

Ich hatte es satt, nach dieser Antwort zu googeln, also verfolgte ich einen ähnlichen Ansatz wie die Antwort, die crizCraig zuvor gepostet hatte.

Ich habe meinem Bash-Profil Folgendes hinzugefügt:

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

Jedes Mal, wenn ich mit einem Zweig fertig bin ( masterz. B. zusammengeführt), führe ich in meinem Terminal Folgendes aus:

gitdelete my-branch-name

... die dann löscht my-branch-nameaus originso lokal wie auch.


7
Erweitern Sie dies --delete "$@"und behandeln Sie es -D "$@"stattdessen $1für mehrere Zweige.
Kunl

3
Ich schlage vor, zuerst git branch -d(mit Kleinbuchstaben 'd') &&auszuführen, um sicherzustellen, dass die Änderungen zusammengeführt wurden, und dann bei Erfolg zu pushen ( zwischen die Befehle zu setzen)
bryn

49

Vor der Ausführung

git branch --delete <branch>

Stellen Sie zunächst sicher, dass Sie den genauen Namen des Remote-Zweigs ermitteln, indem Sie Folgendes ausführen:

git ls-remote

Hier erfahren Sie, was Sie genau für den <branch>Wert eingeben müssen . (unterscheidet zwischen branchGroß- und Kleinschreibung!)


46

Verwenden:

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

Wenn Sie sicher sind, dass Sie es löschen möchten, führen Sie es aus

git branch -D bugfix

Um jetzt gelöschte Remote-Zweige zu bereinigen, laufen

git remote prune origin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.