2016-01-12 22 views
6

Tôi ngạc nhiên, tôi không thể tìm thấy câu trả lời cho điều này trên SO.Git - Chúng tôi có thể khôi phục các cam kết đã xóa không?

Chúng tôi có thể khôi phục/khôi phục các cam kết đã xóa trong git không?

Ví dụ, đây là những gì tôi đã làm:

# Remove the last commit from my local branch 
$ git reset --hard HEAD~1 

# Force push the delete 
$ git push --force 

Bây giờ, là có một cách để lấy lại các cam kết đó đã bị xóa? Git record (log) có xóa nội bộ không?

+0

Bạn có thể tìm thấy cam kết HEAD trước đó của bạn thông qua git reflog và kiểm tra lại lần nữa – Martin

Trả lời

32

Để quay trở lại có hành bạn có thể sử dụng reflog để tìm kiếm ref của nó.

Nhật ký tham chiếu hoặc "reflog", ghi lại khi các mẹo của chi nhánh và các tham chiếu khác được cập nhật trong kho lưu trữ cục bộ.

Chạy lệnh này:

git reflog 

Quét vài mục đầu tiên, và tìm ra cam kết rằng đã bị mất. Theo dõi số nhận dạng cho cam kết đó (bạn có thể sử dụng cột thứ nhất hoặc thứ 2). Hãy gọi mã định danh "ID".

Nếu bạn chưa thực hiện bất kỳ công việc thêm kể từ khi bạn đã reset --hard bạn có thể làm:

git reset --hard ID 
git push -f origin master 

Nếu bạn đã thực hiện các công việc khác kể từ khi đặt lại, bạn có thể cherry-pick nếu trở lại của bạn chi nhánh như thế này:

git cherry-pick ID 
git push origin master 
+1

Rất cám ơn bạn – niahoo

4

Vâng, Bạn có thể tìm bạn cam kết trong reflog sử dụng:

git reflog 

để hiển thị tất cả các cam kết được/được tạo ra trong kho của bạn - sau này bạn nên kiểm để loại bỏ cam kết bằng lệnh thanh toán

git checkout <your commit-SHA> 

hoặc cherry-nhặt nó bởi:

git cherry-pick <your commit-SHA> 
Các vấn đề liên quan