Tôi giải quyết vấn đề này như thế nào? Sử dụng git fsck
và đăng nhập!
Trước tiên hãy tạo tệp chứa cam kết và đốm màu bị mất (không thể truy cập). (Lưu ý: nếu bạn đã làm một cái gì đó như git gc
sau đó nó sẽ thu thập rác thải tất cả chúng cam kết và bạn sẽ không tìm thấy chúng ở đây!)
$git fsck --lost-found > lost_found.commits
Cung cấp cho bạn một tập tin như thế này:
treo lủng lẳng cam dec2c5e72a81ef06963397a49c4b068540fc0dc3
treo lủng lẳng blob f8c2579e6cbfe022f08345fa7553feb08d60a975
treo lủng lẳng blob 0eb3e86dc112332ceadf9bc826c49bd371acc194
treo lủng lẳng blob 11cbd8eba79e01f4fd7f496b1750953146a09502
treo lủng lẳng cam 18733e44097d2c7a800650cea442febc5344f9b3
Dangling blob 1e53a5cdb3ecdde27081ec6e8b31e4070106ee05
Sau đó, bạn có thể mở tệp này với trình soạn thảo văn bản yêu thích để sao chép băm/băm từ đó. (* ho * macro vim hoạt động tuyệt vời cho điều này * ho *)
Bây giờ bạn có thể đăng nhập lại từ này cam kết với cái gì đó như git log --oneline <commit hash>
. Cách khác, gitk, tig hoặc bất kỳ trình xem git nào khác cũng hoạt động.
Trong trường hợp của bạn nếu bạn tìm ra băm cho cam F log sẽ cho bạn thấy một cái gì đó như thế này,
A---B---E---F
Nhanh chóng và dễ dàng! Bây giờ bạn có thể tìm thấy bối cảnh đằng sau tất cả những cam kết lơ lửng đó.
P.S. Vâng, tôi biết, bài viết muộn, nhưng ồ, ai đó có thể tìm thấy nó ở đây và thấy nó hữu ích. (Chủ yếu là khả năng tôi trong 6 tháng khi tôi google này một lần nữa)
+1: Hoàn toàn không có sự khác biệt giữa cam kết cố tình mồ côi bởi 'commit --amend' hoặc' rebase' và một người vô tình mồ côi bằng cách làm việc với HEAD tách rời, nói. – Cascabel
thực sự. có lẽ cách dễ nhất để phục hồi từ tình huống đó sẽ là xem xét việc sửa lỗi cho bản thân HEAD. – araqnid
Cảm ơn, điều này sẽ giúp. Ngay cả những câu trả lời flippant :) +1 – Amadan