Sie können verwenden git reflog
, um die "verlorenen" Commits zu finden:
$ cd submodule_dir $ git reflog # Find the commit $ git checkout master $ git cherry-pick $SHA_OF_MISSING_CMMIT
Ich begann an einigen Dateien zu arbeiten, die ich in einem git-Submodul in einem anderen Projekt hatte. Da es sich jedoch um ein git-Submodul handelt, hat es nie "master" ausgecheckt, sondern lediglich den Kopf ausgecheckt und alle Dateien im Ordner in "no branch" abgelegt.
Nun, da ich versehentlich einige Änderungen an diesen Dateien vorgenommen habe, wurde mir gerade klar, dass ich in einem "no branch", Submodul meines Projekts, arbeitete.
Wie bekomme ich diese Dateien in einen Zweig (wie Master), damit ich sie retten kann?
Sie können verwenden git reflog
, um die "verlorenen" Commits zu finden:
$ cd submodule_dir $ git reflog # Find the commit $ git checkout master $ git cherry-pick $SHA_OF_MISSING_CMMIT
Der Zustand "keine Verzweigung" wird als getrennter HEAD bezeichnet. Dies wird als "HEAD ref" bezeichnet, da sie keinem Zweig zugeordnet ist, sondern direkt auf ein Commit zeigt. Verwenden Sie, um HEAD mit einem Zweig zu verknüpfen, der auf das aktuelle HEAD-Commit verweist git checkout -b branchname
.
Sie können einen vorhandenen Zweig sicher aktualisieren, um die Commits in HEAD in dieser Reihenfolge einzuschließen:
git branch temp git checkout branchname git merge temp git branch -d temp
Oder Sie verwenden gleichermaßen die Umflog-Notation HEAD@
, um zu vermeiden, dass Sie den temporären Zweig erstellen müssen:
git checkout branchname git merge HEAD@
Die Verwendung des temporären Zweigs wäre eine gute Idee, wenn Sie die Zusammenführung nicht sofort durchführen würden.
Wenn Sie einen vorhandenen Zweig zwangsweise überschreiben möchten, um auf das Commit bei HEAD zu verweisen, können Sie dies verwenden git branch -f branchname && git checkout branchname
. Wenn das Commit bei HEAD nicht auf dem aktuellen Tipp von branchname basiert, führt dies zu einer nicht schnellen Vorwärtsänderung des branchnamens, die Sie normalerweise vermeiden möchten (dies wird als Umschreibungshistorie angesehen).
Zu den vorherigen Antworten hinzufügen:
Während Sie sich noch auf einem separaten HEAD befinden, können Sie ein Tag hinzufügen:
git tag <some-tag>
Dies fügt dem Commit ein Tag hinzu, das es in gitk
und anderen Tools sichtbar macht .