Wie löse ich dieses Problem? Verwenden git fsck
und protokollieren!
Erstellen Sie zunächst eine Datei mit verlorenen (nicht erreichbaren) Commits und Blobs. (HINWEIS: Wenn Sie so etwas getan haben git gc
, werden alle festgeschriebenen Commits im Müll gesammelt und Sie werden sie hier nicht finden!)
$git fsck --lost-found > lost_found.commits
Das gibt Ihnen eine Datei wie diese:
baumelnden begehen dec2c5e72a81ef06963397a49c4b068540fc0dc3
baumelnden blob f8c2579e6cbfe022f08345fa7553feb08d60a975
baumelnden blob 0eb3e86dc112332ceadf9bc826c49bd371acc194
baumelnden blob 11cbd8eba79e01f4fd7f496b1750953146a09502
baumelnden begehen 18733e44097d2c7a800650cea442febc5344f9b3
baumelnden blob 1e53a5cdb3ecdde27081ec6e8b31e4070106ee05
Sie können diese Datei dann mit Ihrem bevorzugten Texteditor öffnen, um die Commit- / Blog-Hashes von dort zu kopieren. (* Husten * Vim-Makros eignen sich hervorragend für diesen * Husten *)
Jetzt können Sie sich mit so etwas wie von diesem Commit zurückmelden git log --oneline <commit hash>
. Alternativ sollte gitk, tig oder ein anderer git-Viewer funktionieren.
In Ihrem Fall, wenn Sie den Hash für Commit F finden, zeigt Ihnen das Protokoll ungefähr Folgendes:
A---B---E---F
Schnell und einfach! Jetzt können Sie den Kontext hinter all diesen baumelnden Commits finden.
PS Ja, ich weiß, später Beitrag, aber na ja, jemand könnte ihn hier finden und nützlich finden. (Höchstwahrscheinlich ich in 6 Monaten, wenn ich dies wieder google)
commit --amend
oder verwaist ist,rebase
und einem Commit, das versehentlich durch die Arbeit mit einem abgetrennten HEAD verwaist ist.