switch - git track remote branch




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

Ich möchte einen Zweig sowohl lokal als auch auf meinem Remote-Projektzweig auf GitHub löschen.

Fehlgeschlagene Versuche, Remote Branch 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 muss ich anders tun, um den Zweig remotes/origin/bugfix lokal und auf GitHub erfolgreich zu löschen?


Die kurzen Antworten

Wenn Sie detailliertere Erklärungen zu den folgenden Befehlen benötigen, sehen Sie sich die langen Antworten im nächsten Abschnitt an.

Löschen eines entfernten Zweigs:

git push origin --delete <branch>  # Git version 1.7.0 or newer
git push origin :<branch>          # Git versions older than 1.7.0

Lokale Niederlassung 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 tracking branches
git fetch <remote> -p      # Shorter

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

Wenn Sie Zweige lokal und aus der Ferne löschen, beachten Sie, dass es drei verschiedene Zweige gibt :

  1. Der örtliche Zweig X
  2. Der entfernte Ursprungszweig X
  3. Der lokale Remote-Tracking-Zweig origin/X , der den Remote-Zweig X .

Das Originalposter verwendet

git branch -rd origin/bugfix

der nur seinen lokalen Remote-Tracking-Zweig origin/bugfix und nicht den eigentlichen Remote-Zweig- bugfix am origin gelöscht hat.

Um den eigentlichen entfernten Zweig zu löschen, benötigen Sie

git push origin --delete bugfix

Weitere Details

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

Wenn Sie zum Löschen entfernter Zweige drücken, werden auch Fernverfolgungszweige gelöscht

Wenn Sie den entfernten Zweig X mit git push aus der Befehlszeile löschen git push wird auch der lokale origin/X des entfernten git fetch --prune muss der veraltete git fetch --prune mit git fetch --prune oder git fetch -p git fetch --prune git fetch -p , obwohl es nicht schaden würde, wenn Sie es trotzdem tun würden.

Sie können überprüfen, ob der Remote-Tracking-Zweig origin/X ebenfalls 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 X über die Befehlszeile gelöscht haben (wie oben), enthält Ihr lokales Repo immer noch einen (inzwischen veralteten) Remote-Tracking-Zweig origin/X Dies kann passieren, wenn Sie einen entfernten Zweig direkt über die Weboberfläche von GitHub gelöscht haben.

Ein typischer Weg, um diese veralteten Remote-Tracking-Zweige (seit Git Version 1.6.6) zu entfernen, besteht darin, git fetch einfach mit --prune oder kürzerem -p --prune . Beachten Sie, dass dadurch alle veralteten lokalen Remote-Tracking-Zweige für alle Remote-Zweige entfernt werden, die auf dem Remote nicht mehr vorhanden sind :

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

Hier ist das entsprechende Zitat aus den 1.6.6 Versionshinweisen (Hervorhebungsmine):

"git fetch" lernte --all und --multiple , um das Abrufen aus vielen Repositorys --prune , und --prune -Option, um entfernte Tracking-Verzweigungen zu entfernen. Diese machen "git remote update" und "git remote prune" weniger notwendig (es ist jedoch nicht geplant, "remote update" und "remote prune" zu entfernen).

Alternative zum automatischen automatischen Beschneiden für veraltete Remote-Tracking-Zweige

Statt Ihre veralteten lokalen Remote-Tracking-Zweige durch git fetch -p beschneiden, können Sie alternativ den zusätzlichen Netzwerkbetrieb vermeiden, indem Sie einfach die Zweige mit den --remote oder -r manuell entfernen:

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

Siehe auch


Zusammenfassung

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

Beachten Sie, dass in den meisten Fällen der entfernte Name origin .

Lokale Niederlassung löschen

Um die lokale Niederlassung zu löschen, verwenden Sie eine der folgenden Möglichkeiten:

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

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

Remote-Zweig löschen [Aktualisiert am 08.09.2017]

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

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

was leichter zu merken ist als

$ git push <remote_name> :<branch_name>

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

Ab Git v2.8.0 können Sie auch git push mit der Option -d als Alias ​​für --delete .

Die Version von Git, die Sie installiert haben, bestimmt daher, ob Sie die einfachere oder härtere Syntax verwenden müssen.

Remote-Zweig löschen [Originalantwort vom 5. Januar 2010]

Aus Kapitel 3 von Pro Git von Scott Chacon:

Entfernte Zweige löschen

Angenommen, Sie sind mit einem Remote-Zweig fertig. Nehmen Sie an, Sie und Ihre Mitarbeiter sind mit einem Feature fertig und haben es mit dem Master-Zweig Ihrer Fernbedienung (oder dem Zweig, in dem sich Ihre stabile Codeline befindet) zusammengeführt. Sie können einen entfernten Zweig mit der eher stumpfen Syntax git push [remotename] :[branch] löschen. Wenn Sie Ihren Serverfix-Zweig vom Server löschen möchten, führen Sie Folgendes aus:

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

Boom. Kein Zweig mehr auf Ihrem Server. Möglicherweise möchten Sie diese Seite abhören, da Sie diesen Befehl benötigen und wahrscheinlich die Syntax vergessen. git push [remotename] [localbranch]:[remotebranch] an diesen Befehl zu erinnern, können Sie sich an die git push [remotename] [localbranch]:[remotebranch] , die wir zuvor etwas git push [remotename] [localbranch]:[remotebranch] haben. Wenn Sie den Teil [localbranch] , dann sagen Sie im Grunde: "Nehmen Sie nichts von meiner Seite und machen Sie es [remotebranch] ."

Ich habe git push origin :bugfix ausgegeben und es hat wunderbar funktioniert. Scott Chacon hatte recht - ich möchte diese Seite abhören (oder praktisch abhören, indem ich dies auf beantworte).

Dann sollten Sie dies auf anderen Maschinen ausführen

git fetch --all --prune

Änderungen verbreiten.


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 '[email protected]:SomeName/some-repo.git'

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

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

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

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

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 zunächst den lokalen Zweig mit dem Befehl:

git branch -d example

(hier ist example der Zweigname)

Und danach den entfernten Zweig mit dem Befehl löschen:

git push origin :example

Entfernten Zweig löschen

git push origin :<branchname>

Lokale Niederlassung löschen

git branch -D <branchname>

Lokale Zweigschritte löschen:

  1. Kasse in eine andere Filiale
  2. Lokale Niederlassung löschen

Ich habe es satt gegoogelt für diese Antwort, also habe ich die Antwort, die crizCraig zuvor gepostet hat, auf eine ähnliche Weise angegangen .

Folgendes zu meinem Bash-Profil hinzugefügt:

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

Dann führe ich jedes Mal, wenn ich mit einem Zweig fertig bin (z. B. in master , in meinem Terminal Folgendes ein:

gitdelete my-branch-name

... die dann my-branch-name Zweignamen sowohl vom origin als auch lokal löscht.


Jetzt können Sie es mit der GitHub Desktop App tun.

Nach dem Start der App

  1. Klicken Sie auf das Projekt, das den Zweig enthält
  2. Wechseln Sie zu dem Zweig, den Sie löschen möchten
  3. Wählen Sie im Menü "Branch" die Option "Unpublish ...", um den Zweig von den GitHub-Servern zu löschen.
  4. Wählen Sie im Menü "Branch" die Option "Delete" branch_name "...", damit der Zweig von Ihrem lokalen Computer gelöscht wird (dh der Computer, an dem Sie gerade arbeiten).

Mashup aller anderen Antworten. Benötigt Ruby 1.9.3+, nur unter OS X getestet.

Rufen Sie diese Datei git-remove , machen Sie sie ausführbar und geben Sie sie in Ihren Pfad ein. Verwenden Sie dann zum Beispiel git remove temp .

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

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

Sagen Sie einfach:

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

Seit Januar 2013 hat GitHub auf der Seite "Branches" neben jedem Zweig eine Schaltfläche zum Löschen von Zweigen hinzugefügt.

Relevanter Blogbeitrag: Erstellen und Löschen von Zweigen


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

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

Es beschneidet und löscht Remote-Tracking-Zweige aus einer git branch -r Liste.


So löschen Sie Ihren Zweig lokal und remote

  • Checkout zum Hauptzweig - git checkout master

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

  • Löschen Sie Ihren lokalen Zweig - git branch --delete <branch-name>


Viele der anderen Antworten führen zu Fehlern / Warnungen. Dieser Ansatz ist relativ some_other_branch , obwohl Sie möglicherweise noch git branch -D branch_to_delete wenn er nicht vollständig in some_other_branch ist.

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 zu erhalten, die für ein Repo verfügbar sind, das Sie verfolgen. Ich habe beobachtet, dass git fetch Fernbedienungen hinzufügt, nicht entfernt. Hier ein Beispiel, wenn git remote prune origin tatsächlich etwas tut:

Benutzer A führt die obigen Schritte aus. Benutzer B führt die folgenden Befehle aus, um die aktuellsten entfernten Verzweigungen anzuzeigen

git fetch
git remote prune origin
git branch -r

Vor der Ausführung

git branch --delete <branch>

Stellen Sie sicher, dass Sie zuerst den exakten Namen des entfernten Zweigs ermitteln, indem Sie Folgendes ausführen:

git ls-remote

Dadurch erfahren Sie, was EXACTLY für den <branch> -Wert einzugeben ist. ( branch ist case sensitive!)


Wenn Sie eine Zweigstelle löschen möchten, checken Sie zuerst an die Zweigstelle, die nicht zu löschen ist.

git checkout other_than_branch_to_be_deleted

Lokale Niederlassung löschen:

git branch -D branch_to_be_deleted

Löschen des entfernten Zweigs:

git push origin --delete branch_to_be_deleted

Zusätzlich zu den anderen Antworten verwende ich häufig das Tool git_remote_branch . Dies ist eine zusätzliche Installation, aber Sie erhalten eine bequeme Möglichkeit, mit Remote-Filialen zu interagieren. In diesem Fall löschen:

grb delete branch

Ich finde, dass ich auch häufig die Befehle zum publish und track benutze.


Ein Linienbefehl löscht sowohl lokal als auch remote :

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

oder fügen Sie den unten stehenden Alias ​​zu Ihrer ~ / .gitconfig hinzu ; Verwendung: git kill branch-name

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

Lokal löschen - (Normal),

git branch -d my_branch

Wenn der Zweig beim Umbasieren / Zusammenführen des Fortschritts nicht ordnungsgemäß ausgeführt wurde, wird ein Fehler beim Rebase/Merge in progress In diesem Fall können Sie den Zweig nicht löschen.

Daher müssen Sie entweder das Umbasieren / Zusammenführen lösen. Andernfalls können Sie das Löschen erzwingen, indem Sie

git branch -D my_branch

In Remote löschen:

git push --delete origin my_branch

kann das gleiche mit,

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

Grafische Darstellung,


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

git push origin --delete branchName

ist leichter zu merken als

git push origin :branchName




git-remote