In Git sind Zweige nur Zeiger (Verweise) auf Commits in einem gerichteten azyklischen Graphen (DAG) von Commits. Dies bedeutet, dass beim Löschen eines Zweigs nur Verweise auf Commits entfernt werden, wodurch einige Commits in der DAG möglicherweise nicht erreichbar und somit unsichtbar werden. Alle Commits, die sich in einem gelöschten Zweig befanden, befinden sich jedoch weiterhin im Repository, zumindest bis nicht erreichbare Commits entfernt werden (z git gc
. B. mithilfe von ).
Beachten Sie, dass git branch -d
das Löschen eines Zweigs abgelehnt wird, wenn nicht sicher ist, dass beim Löschen keine nicht erreichbaren Commits hinterlassen werden. Sie müssen die stärkere verwenden git branch -D
, um das Löschen eines Zweigs zu erzwingen, wenn dadurch möglicherweise nicht erreichbare Commits zurückbleiben.
Beachten Sie auch, dass nicht erreichbare Commits, sofern vorhanden, nur die Commits zwischen dem letzten Tipp eines gelöschten Zweigs und entweder einem Commit, das mit einem anderen vorhandenen Zweig zusammengeführt wurde, einem mit Tags versehenen Commit oder dem Verzweigungspunkt sind. was auch immer später ist. Zum Beispiel in der folgenden Situation:
---- O ---- * ---- * ---- / M ---- * <- master <- HEAD
\ /
\ --. ---- .-- / - x --- y <- Zweig gelöscht
Nur Commits 'x' und 'y' sind nach dem Löschen des Zweigs nicht mehr erreichbar.
Wenn Sie einen gelöschten Zweig innerhalb des gc.reflogExpire
Zeitraums von standardmäßig 90 Tagen bearbeitet haben, wird der letzte Tipp eines gelöschten Zweigs im HEAD-Reflog aufgezeichnet (siehe git reflog show HEAD
oder git log --oneline --walk-reflogs HEAD
). Sie sollten HEAD-Reflog verwenden können, um den gelöschten Zeiger wiederherzustellen. Beachten Sie auch, dass in diesem Fall nicht erreichbare Commits in nur einem gelöschten Zweig innerhalb des gc.reflogExpireUnreachable
Zeitraums von standardmäßig 30 Tagen vor dem Beschneiden (Entfernen) geschützt sind .
Wenn Sie die Spitze eines gerade gelöschten Zweigs im Reflog für HEAD nicht finden können, können Sie versuchen, git fsck
"nicht erreichbares Commit <sha1>" zu finden, und diese (über git show <sha1>
oder git log <sha1>
) untersuchen, um die Spitze des gelöschten Zweigs zu finden.
Unabhängig davon, wie Sie die Spitze eines gelöschten Zweigs finden, können Sie das Löschen rückgängig machen oder vielmehr einen gerade gelöschten Zweig mit neu erstellen
git branch <deleted-branch> <found-sha1-id>
Beachten Sie jedoch, dass ein Reflog für einen Zweig verloren gehen würde.
Es gibt auch das Skript git-resurrect.sh, mit contrib/
dem Spuren einer Verzweigungsspitze mit Vorname gefunden und wiederbelebt (wiederhergestellt) werden können.