Löschen des Git-Zweigs

79

Was bedeutet in Git das "Löschen" eines Zweigs?

Wird es aus dem Repository verschwunden sein? Oder ist es weiterhin navigierbar zu via git branch?

Was ich wirklich tun möchte, ist, einen Zweig als "Sackgasse" zu markieren, dh der Zweig ist so weit vom Master entfernt, dass niemand ihn als Ausgangspunkt verwenden sollte, obwohl es in diesem Zweig einige gute Ideen gab, also würden wir möchte es als Referenz behalten.

Bobobobo
quelle

Antworten:

157

Sie können den Zweig löschen, ihn jedoch zuerst markieren, damit der Verlauf nicht verschwindet. Auf diese Weise wird der Zweig nicht in der Zweigliste angezeigt, was hoffentlich die Leute davon abhalten sollte, daran zu arbeiten, aber die Arbeit wird nicht dauerhaft gelöscht (selbst nachdem die Speicherbereinigung ausgeführt wurde). Wenn ich beispielsweise einen Zweig habe, der irrelevant geworden ist, aber nicht bereit ist, ihn dauerhaft zu löschen, markiere ich ihn als "Archiv / < Zweigname >".

Während auf masteroder einem anderen Zweig:

git tag archive/foo foo
git branch -D foo

Dadurch wird vor dem Löschen ein Tag mit dem Namen archive/fooaus dem fooZweig erstellt foo. Sie können dem Tag auch eine Nachricht hinzufügen, die erklärt, was sich in der Verzweigung befindet, warum es existiert, warum es jetzt eine Sackgasse ist usw.

git tag -m 'Foo is deprecated in favor of bar' archive/foo foo

Die Möglichkeit aufzuzeichnen, warum ein Zweig veraltet ist, ist möglicherweise ein Vorteil des Markierens gegenüber dem Verschieben von Zweigen in einen alternativen Namespace.

Wenn Sie jemals einen Zweig wiederbeleben müssen, der auf diese Weise archiviert wurde, ist dies so einfach wie:

git branch foo archive/foo
git tag -d archive/foo       # Optional

Jetzt ist der Zweig zurück, als wäre er nie gelöscht worden.

Dan Moulding
quelle
5
@sardaukar: Dies kann auch mit Remote-Repos funktionieren, indem das Archiv-Tag (mit der --tagsOption auf git push) :<branch-to-delete>gedrückt und dann der Remote-Zweig gelöscht wird (mithilfe der Referenzspezifikation beim Push). Zum Beispiel:git tag archive/foo foo; git branch -D foo; git push --tags origin :foo
Dan Moulding
Es wäre schön, wenn git die Möglichkeit hätte, die Leute automatisch zu informieren, "dieser Zweig wurde archiviert", und die Commit-Nachricht anzuzeigen, wenn die Leute versuchten, aus einem archivierten Zweig zu ziehen, dies aber nicht.
Robin Green
1
Sehr schöne Antwort, genau das, wonach ich gesucht habe! Ist dies nur nützlich, wenn der Zweig vor dem Löschen wieder mit dem Master zusammengeführt wurde?
Claf
Eine andere verwandte Frage (wenn noch jemand diesem Thread folgt) ist, wie ich "schließen" soll (im Master zusammenführen oder in einem Tag archivieren oder was auch immer), wenn mehrere Entwickler an diesem Zweig beteiligt waren. Das Entfernen und Markieren des Zweigs (sowohl lokal als auch remote) ist für andere Entwickler dieses Zweigs nicht zu unhöflich?
Claf
1
Diese Antwort ist eine großartige, brillante Lösung
Christopher Thomas
2

Git-Zweige werden als Verweise auf eine Revision gespeichert. Wenn Sie den Zweig löschen, wird die Referenz entfernt. Wenn nichts anderes auf diese Revision verweist, wird es schließlich Müll gesammelt. Wenn Sie den Zweig löschen, ist er ordnungsgemäß entfernt (aus Ihrem Repository). Wenn Sie einen Zweig als veraltet markieren möchten, ihn aber für die spätere Verwendung beibehalten möchten, können Sie den Zweig in ein Unterverzeichnis verschieben:

$ git branch
* master
  testing_feature_one
  testing_feature_two
$ git branch -m testing_feature_one deprecated/testing_feature_one
$ git branch
  deprecated/testing_feature_one
* master
  testing_feature_two

Alternativ können Sie ein separates Repository für veraltete Zweige erstellen, diese ziehen und dann aus dem Original löschen. In beiden Fällen sind alle Benutzer betroffen, die den Zweigen folgen. Der Inhalt ihres Repositorys ändert sich nicht (und auch keiner der Zweignamen). Wenn sie jedoch versuchen, erneut zu ziehen, werden sie dies tun müssen ihr Ziel in ihrer Konfiguration ändern.

Andrew Aylett
quelle
2

git branch -D <branchName>löscht Ihren Zweig aus dem Repository. Sie können es nicht mehr sehen oder navigieren. Außerdem verlieren Sie alle in diesem Zweig vorgenommenen Dateiänderungen.

https://git-scm.com/docs/git-branch

Stewie Griffin
quelle
0

Es kann nicht über den Git-Zweig navigiert werden, und bis die Garbage Collection durchgeführt wird, geht es nicht aus dem Repository verloren.

Wenn Sie den betreffenden Zweig als Sackgasse markieren möchten, tun Sie dies einfach (git tut dies möglicherweise nicht für Sie, aber Sie können es auf jeden Fall)!

Beschriften Sie es (wie Sie es bevorzugen) als historisches Nachschlagewerk.

Fake Code Monkey Rashid
quelle