Github hướng dẫn restore và undo commit
Hướng dẫn lấy lại commit đã mất trên github local
Bài viết gần đây nhất của mình về cách xóa commit và push force lên github để tạo ra những commit đẹp :D đi vào lòng người.
Vào một ngày trời không mưa, cũng không có trăng sao gì hết, bạn làm xong task xếp mới giao cho và push lên nhánh của ticket, và tạo pull request cho 500 anh em review code.
Một phút sau các thánh xoi đã tìm ra những đoạn code ngớ ngẩn của bạn, và comment trực tiếp vào những đoạn code ngáo mà họ tìm được, và nhắn tin cho bạn vào rep comment kìa. Một cảm giác thật thốn khi code khá cẩn thận mà vẫn bị soi ra lỗi, bật máy tính lên và xem mình cần sửa gì, có đoạn comment nào mình có thể comment bật lại 500 anh em không ? Rất tiếc vì chả có trường hợp nào xảy ra như chúng ta mong muốn, đành ngậm ngùi sửa theo comment của 500 anh em và tiện thể xóa luôn cái commit ngu si trước đó, đang bị comment tới tấp luôn, thay vào đó là đoạn code xịn xò như con bò mà mình vừa sửa lại.
git reset --soft HEAD~1
git push <remote> <branch> -f
Mụch đích của lệnh này là mình xóa cái commit cuối tên là:
[121]_add reference navigation for cron.xml
Sau đó mình sửa lại code cũ thành code mới và push force lên thoai, sẽ không ai biết sự ngu người của mình nữa ahii :v
Ô tô kê, đã sửa lại xịn xò rồi phải thông báo cho 500 anh em vào review code thoai. Bật skype lên ping ngay "500 anh em đâu ra đây mà xem pull reuqest đã được sửa rồi kìa... Lêu Lêu"
Sếp messages lại ngay: Đù sao mày lại push force lên, mất hết comment của tao rồi, làm sao tao biết mày sửa chỗ nào, đã đúng ý tao chưa thằng ngu :)).
Đọc xong tin nhắn, và thốt lên một câu "Sai lầm tuổi trẻ rồi!!". Lên ngay google và tìm xem có cách nào push được cái commit trước đó đang bi 500 anh em bắt lỗi không ? Sau 10 phút google cuối cùng cũng đã tìm ra cách để push cái commit ngu si mà mình đã cố tình xóa đi để không ai biết :))
Cách này chỉ hoạt động khi git local vẫn chưa bị xóa, vì theo mình biết cái history này được lưu ở local nên khi gặp phải vấn đề như này cần hết sức bình tĩnh không sẽ không cứu được đâu nhé, bây giờ chúng ta sẽ bắt tay vào sửa chữa lỗi lầm của lỗi lầm nhé :v
Cảm ơn anh github đã sinh ra cái lệnh reflog và bây giờ mới sài đến nó, Thank god.
git reflog --date=iso
Nhìn vào kết quả thật hạnh fix khi đã thấy bóng dáng của cái commit bị mất khi mình push force, giờ đơn giản chỉ cần chạy lệnh.
git reset --hard <commit>
Ví dụ lấy lại cái commint mình xóa đi tên là:
[121]_add reference navigation for cron.xml
git reset --hard c004f24
Bây giờ có thể gọi là qua thời khắc nguy hiểm rồi. Bạn sẽ push commit cũ lên remote và những comment của 500 anh em sẽ xuẩt hiện lại thôi :))
git push <remote> <branch>
Thanks.
Post a Comment