Git - Khôi phục bằng reflog sau khi lỡ tay xóa commit hoặc branch.

Nhiều khi bạn lỡ tay reset hard, xóa commit, xóa branch, ... Có rất ít người biết cách để khôi phục, nhiều bạn còn "trâu bò" hơn khi quyết định.... ngồi code lại. Hầu hết chúng ta có thể cứu nhờ vào cỗ máy thời gian của Git: reflog

Xem reflog để khôi phục lại 1 commit bất kì


Reflog như cỗ máy thời gian, nó ghi lại toàn bộ những gì bạn đã làm, kể cả khi bạn xóa 1 commit nào đó.
0979a9e [email protected]{1}: reset: moving to HEAD~
4d77eb9 [email protected]{2}: commit: Add UI for data showcase.
0979a9e [email protected]{3}: commit: Finish UAF module, need update xls file normaly
4d3afe9 [email protected]{8}: commit: Finish UFM Module
c1fe83d [email protected]{9}: commit: Add faculty to model
b5d314a [email protected]{10}: commit: Add faculty_code
c528ae5 [email protected]{11}: pull: Fast-forward
...

0979a9e hoặc [email protected]{3} là id của commit Finish UAF module, need update xls file normaly
Để khôi phục lại commit đó

git reset --hard 0979a9e
HEAD is now at 0979a9e Finish UAF module, need update xls file normaly

Lỡ tay reset --hard

Tương tự như trên, ta xem lại reflog
$ git reset --hard HEAD~
Kết quả sẽ là
0979a9e [email protected]{1}: reset: moving to HEAD~
4d77eb9 [email protected]{2}: commit: Add UI for data showcase.
0979a9e [email protected]{3}: commit: Finish UAF module, need update xls file normaly
237e662 [email protected]{4}: commit: Add noti token update in UFM module
2e99cad [email protected]{5}: commit: Add run shell script, fix out of memory
712d37c [email protected]{6}: commit: Fix priority, SGU doesn't have priority value
295779f [email protected]{7}: pull: Fast-forward
....


0979a9e là commit reset HEAD, 4d77eb9 là commit bị mất bạn cần sẽ nhảy đến. Để khôi phục
git reset --hard 0979a9e
HEAD is now at 0979a9e Finish UAF module, need update xls file normaly

Lỡ xóa branch

Trong trường hợp bạn lỡ xóa branch bằng branch -D thì cũng có thể dễ dàng khôi phục như trường hợp mất commit.
$ git br -D duyetdev
Deleted branch duyetdev (was 700674f).
Ta xem lại lịch sử bằng reflog
$ git reflog

9b48127 [email protected]{0}: checkout: moving from duyetdev to master
788674f [email protected]{1}: reset: moving to 788674f
Trạng thái muốn quay lại là 788674f, vì thế
$ git branch develop 788674f
$ git checkout develop
Và chúng ta sẽ quay lại branch vừa bị xóa lúc nãy.

Kết

Reflog là một công cụ mạnh mẽ trong git, nó như cỗ máy thời gian giúp ta khôi phục bất cứ chỗ nào, đây không phải là công cụ duy nhất nhưng có thể ó sẽ là cứu cánh cuối cùng mỗi khi "lỡ dại" đấy nhé. Chúc bạn thành công :D

Related