2012-02-17 25 views
17

Tôi đã thực hiện một loạt các cam kết về những gì tôi nghĩ là chi nhánh của tôi, sau đó kiểm tra chi nhánh khác.HEAD Git/tách rời, tải lại công việc?

Sẵn sàng quay trở lại nhánh ban đầu của tôi, tôi không tìm thấy mã được cập nhật của mình. Sau khi nhìn vào lịch sử của tôi trong giao diện điều khiển, tôi hiểu rằng tôi đã làm việc trong một chi nhánh tách rời ...

Bằng cách nào đó tôi có thể thực hiện công việc tôi đã làm trên nhánh tách rời?

Trả lời

23

Có. Bạn có thể sử dụng reflog. Hãy thử git log -g HEAD. Điều này sẽ hiển thị cho bạn bản chỉnh sửa cho HEAD, tức là mọi cam kết đơn lẻ mà HEAD đã chỉ ra và lý do khiến nó thay đổi thành cam kết đó. Bạn sẽ có thể tìm thấy lệnh của bạn đã kiểm tra chi nhánh, và xem những gì cam kết trước đó là.

Bạn cũng có thể sử dụng cú pháp khác để lập chỉ mục vào việc chỉnh sửa lại. Nếu bạn vừa thực hiện git checkout branch, thì [email protected]{1} sẽ tham chiếu đến cam kết đã kiểm tra trước đó (để bạn có thể git checkout [email protected]{1} quay lại). Hoặc nếu bạn biết rằng 10 phút trước HEAD đã trỏ đến đúng thứ, bạn có thể sử dụng git checkout [email protected]{10.minutes.ago}.

+2

cảm ơn SO nhiều, bạn chỉ cần lưu 4 giờ làm việc .... – apneadiving

+0

@apneadiving: Bất kỳ điều gì bạn thực sự cam kết với git đều có thể được truy xuất sau này. Phải mất khoảng 1,5 tháng trước khi một đối tượng cam kết không được chấp nhận thực sự là rác được thu thập (1 tháng rơi ra khỏi reflog, và 2 tuần nữa trước khi bị xóa). Trường hợp xấu nhất bạn có thể tìm thấy các đối tượng này với 'git fsck --lost-found'. –

+0

ok cảm ơn một lần nữa vì những chi tiết này. – apneadiving

9

thư giãn, mọi thứ vẫn còn ở đó :)

Chỉ cần gọi

git reflog 

git sẽ cho bạn biết những gì cam kết HEAD chỉ trước đó. Sẽ có một dòng như

checkout: moving from c70e36e25ac2dbedde6cb376719381fe0ab53f19 to master 

cho bạn biết SHA1 của đầu cam kết với một đầu bị tách rời. Tạo chi nhánh mới trỏ tới mẹo đó bằng cách sử dụng

git branch saved-commits c70e36e25ac2dbedde6cb376719381fe0ab53f19 

Bây giờ bạn có thể rebase nhánh đó trên đầu nhánh mà cam kết được cho là đến.

+0

Cảm ơn bạn rất nhiều, rất quý giá để có câu trả lời bổ sung. – apneadiving

Các vấn đề liên quan