Как я решаю эту проблему? Используйте git fsck
и войдите!
Сначала создайте файл, содержащий потерянные (недоступные) коммиты и BLOB-объекты. (ПРИМЕЧАНИЕ: если вы сделали что-то подобное git gc
, сборщик мусора соберет все их коммиты, а вы их здесь не найдете!)
$git fsck --lost-found > lost_found.commits
Это дает вам такой файл:
оборванный совершить dec2c5e72a81ef06963397a49c4b068540fc0dc3
оборванных блобо f8c2579e6cbfe022f08345fa7553feb08d60a975
оборванных блобо 0eb3e86dc112332ceadf9bc826c49bd371acc194
оборванных блобо 11cbd8eba79e01f4fd7f496b1750953146a09502
оборванных совершить 18733e44097d2c7a800650cea442febc5344f9b3
оборванных блоб 1e53a5cdb3ecdde27081ec6e8b31e4070106ee05
Затем вы можете открыть этот файл в своем любимом текстовом редакторе, чтобы скопировать из него хэши коммитов / блогов. (* кашель * макрос vim отлично подходит для этого * кашля *)
Теперь вы можете выйти из этого коммита с чем-то вроде git log --oneline <commit hash>
. Кроме того, должен работать gitk, tig или любой другой git viewer.
В вашем случае, если вы найдете хеш для коммита F, журнал покажет вам что-то вроде этого,
A---B---E---F
Быстро и просто! Теперь вы можете найти контекст за всеми этими висячими коммитами.
PS Да, я знаю, поздний пост, ну да ладно, кто-то может найти это здесь и найти это полезным. (Скорее всего, я через 6 месяцев, когда я снова Google это)
commit --amend
или,rebase
и коммитом, случайно осиротевшим, например, при работе с отдельным HEAD.