Was passiert mit einem Git-Branch nach dem Löschen, wenn er nicht gemergt wurde?

Lesezeit: 3 Minuten

Benutzeravatar von inf3rno
inf3rnr

Ich habe ein kleines Repo mit einem Master- und einem experimentellen Zweig, um einige neue Funktionen auszuprobieren. Ich habe mich entschieden, diese Funktionen nicht auf dem Master zu implementieren.

Was passiert mit den Commits des experimentellen Zweigs, wenn ich diesen Zweig mit lösche? git push origin --delete <branchName>? Wird Git einige nicht zugängliche Überreste behalten? Wenn ich mich gut erinnere, habe ich Tags in diesem Zweig und er wird auf Github hochgeladen. Wird dies zu Problemen führen?

bearbeiten:

Ich habe mit überprüft gitk --all Wie vorgeschlagen, sieht das Commit-Diagramm so aus:

Commit-Graph

Was ich möchte, ist der babel-Zweig mit all seinen Commits zu entfernen, und ich möchte nicht, dass er wiederherstellbar ist. Ist das möglich?

Das Löschen einer Verzweigung bewirkt nur Folgendes: Lösche die Verzweigung. Da ein Branch nur ein Verweis auf ein Commit ist, ist nur dieser Verweis verschwunden. Das Commit ist immer noch da.

Ähnlich wie Programmiersprachen verfügt Git über eine Garbage Collection, die schließlich Commit-Objekte entfernt, auf die nicht mehr verwiesen wird. Wenn also dieser Zweig der einzige Zeiger auf diesen Commit war, verlieren Sie effektiv den Zugriff darauf und er wird „bald“ gelöscht.

Wenn Sie andere Referenzen haben, darunter andere Branches, Tags und Commits, die indirekt auf dieses Commit verweisen (dh für das dieses Commit ein übergeordnetes Element ist), dann wird das Commit immer noch referenziert und es wird nicht gelöscht.

Wenn Sie also a loswerden wollen verpflichten, müssten Sie alle Verweise auf diesen Commit entfernen. Wenn Sie den Branch löschen möchten und andere Dinge auf einen Commit von diesem Branch verweisen, dann ist das kein Problem und wird keine Probleme verursachen: Es ist ein erwünschtes Verhalten, dass der Commit dann beibehalten wird, damit die anderen Dinge nicht kaputt gehen .

  • Vielen Dank! Ich habe also nichts manuell mit diesen nicht referenzierten Commits zu tun, der gc kümmert sich darum.

    – inf3rno

    10. Januar 2016 um 3:25 Uhr

  • Ja, schließlich. Was Ihre Bearbeitung betrifft, so werden diese Commits für die Garbage Collection verfügbar gemacht, indem Sie den babel-Zweig (lokal und remote) und diesen Stash löschen.

    – stupsen

    10. Januar 2016 um 4:34 Uhr

Benutzeravatar von florieger
Florieger

Was passiert mit den Commits des experimentellen Zweigs, wenn ich diesen Zweig mit lösche? git push origin --delete <branchName> ?

Der spezifische Zweig wird in Ihrem lokalen und Ihrem entfernten Repository gelöscht. Ich kann es möglicherweise nicht mehr wiederherstellen.

Wird Git einige nicht zugängliche Überreste behalten?

Laut dieser Antwort https://stackoverflow.com/a/4674570/1654730 ist es möglicherweise möglich, den Zweig mit Hilfe des Reflogs wiederherzustellen.

Wenn ich mich gut erinnere, habe ich Tags in diesem Zweig und er wird auf Github hochgeladen. Wird dies zu Problemen führen?

Dies sollte keine Probleme verursachen. Wenn Sie Tags in diesem Branch haben, können Sie immer noch auf die Tags zugreifen und einen neuen Branch basierend darauf erstellen.

Benutzeravatar von Richard Fearn
Richard Furcht

Ja, git wird einige nicht zugängliche Überbleibsel behalten – zumindest am Anfang. Commits, auf die von bestehenden Branches oder Tags nicht zugegriffen werden kann, werden aufgerufen baumelnde Commits. Siehe zum Beispiel diese Frage: Git: Was ist ein Dangling Commit/Blob und woher kommen sie?

Wenn Sie Tags im Branch erstellt und diese Tags an GitHub gepusht haben, sind die Tags weiterhin in Ihrem lokalen Repository vorhanden, sodass Commits, auf die über diese Tags zugegriffen werden kann, niemals gelöscht werden.

Sie könnten zum Beispiel verwenden gitk --all um alle Zweige und Tags in Ihrem lokalen Repository anzuzeigen, und wenn Sie Tags sehen, die sich auf dem alten Zweig befanden, den Sie jetzt gelöscht haben, können Sie auch jedes Tag löschen, indem Sie verwenden

git tag -d TAG-NAME

um das Tag lokal zu löschen und das Tag auch von GitHub zu löschen, indem Sie Folgendes verwenden:

git push origin :refs/tags/TAG-NAME

Nicht zugängliche Commits werden schließlich entfernt, wenn Git eine Garbage Collection im Repository durchführt. Wie in der anderen Stack Overflow-Frage erwähnt, gibt es weitere Informationen dazu in der Wartung und Datenwiederherstellung Abschnitt an git-scm.com.

1429250cookie-checkWas passiert mit einem Git-Branch nach dem Löschen, wenn er nicht gemergt wurde?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy