Dies hängt davon ab, was Sie beim Auschecken dieses Commits tun möchten. Wenn Sie es nur auschecken, um diese Revision zu erstellen oder zu testen, ist es nichts Falsches, mit einem abgenommenen Kopf zu arbeiten. Denken Sie daran, einen tatsächlichen Zweig zu überprüfen, bevor Sie Commits vornehmen (git checkout master
, z. B.), damit Sie keine Commits erstellen, die in keinem Zweig enthalten sind.
Wenn Sie jedoch ab diesem Punkt mehr Commits durchführen möchten, sollten Sie einen Zweig erstellen. Wenn Sie Commits ausführen, auf die nicht von einem Zweig verwiesen wird, können diese leicht verloren gehen und werden schließlich vom Garbage Collector von git bereinigt, da sich nichts auf sie bezieht. Sie können einen neuen Zweig erstellen, indem Sie Folgendes ausführen:
git checkout -b newbranch ea3d5ed
Zur besseren Veranschaulichung finden Sie hier einige Diagramme, die zeigen, wie sich die Arbeit an einem abgetrennten Kopf von der Arbeit an einem Zweig unterscheidet.
Beginnen wir mit 3 Commits auf master
, A, B und C. master
ist der aktuelle Zweig, zeigt also HEAD
aufmaster
die Punkte, auf die C festgeschrieben werden soll.
ABC
* - * - * <- master <- HEAD
Wenn wir jetzt ein Commit durchführen, erstellt git ein Commit mit C als übergeordnetem Element (da dies das aktuelle Commit ist, auf das von HEAD
via verwiesen wird master
) und wird aktualisiert master
, um auf dieses neue Commit zu verweisen. Alle unsere Commits sind jetzt in master
und HEAD
verweisen auf das neue Commit durch master
.
A B C D
* - * - * - * <- master <- HEAD
Schauen wir uns jetzt B an und geben uns eine freistehende HEAD
.
A B C D
* - * - * - * <- master
^
\-- KOPF
Hier funktioniert alles gut; Wir können uns alle Dateien ansehen, unser Programm erstellen, es testen usw. Wir können sogar neue Commits erstellen. Wenn wir dies tun, gibt es keinen Zweig, in dem wir uns befinden, sodass wir keinen Zweig auf dieses neue Commit verweisen können. Das einzige, was darauf hinweist, ist HEAD
:
A B C D
* - * - * - * <- master
\.
* <- KOPF
E.
Wenn wir uns später dazu entschließen, master
erneut auszuchecken, wird sich nichts auf E beziehen.
A B C D
* - * - * - * <- master <- HEAD
\.
* *
E.
Da sich nichts darauf bezieht, kann es schwierig sein, sie zu finden, und git betrachtet Commits ohne Verweise als abgebrochen (sie treten häufig auf, wenn Sie Patches neu erstellen, Squash-Squashs ausführen oder andere lustige Verlaufsmanipulationen durchführen; sie stellen normalerweise verlassene Patches dar; das interessiert dich nicht mehr). Nach einer bestimmten Zeit betrachtet git es als Müll, der beim nächsten Ausführen der Garbage Collection verworfen wird.
Anstatt eine bloße Revision auszuchecken und einen abgetrennten Kopf zu erhalten, sollten Sie, wenn Sie das Gefühl haben, mehr Commits zu machen git checkout -b branch B
, einen Zweig erstellen und ihn auschecken. Jetzt gehen Ihre Commits nicht verloren, da sie in einem Zweig enthalten sind, auf den Sie leicht verweisen und der später zusammengeführt werden kann.
A B C D
* - * - * - * <- master
^
\ - branch <- HEAD
Wenn Sie dies vergessen und Commits außerhalb eines Zweigs erstellen, müssen Sie sich keine Sorgen machen. Sie können einen Zweig erstellen, der auf die Kopfrevision mit verweist git checkout -b branch
. Wenn Sie bereits wieder in den master
Zweig gewechselt sind und feststellen, dass Sie ein Streu-Commit vergessen haben, können Sie es mithilfe von git reflog
finden. Dies zeigt Ihnen einen Verlauf dessen, worauf Commits HEAD
in den letzten Tagen hingewiesen haben. Alles, was sich noch im Reflog befindet, wird nicht als Müll gesammelt, und Referenzen werden im Allgemeinen mindestens 30 Tage lang im Reflog aufbewahrt.