2012-04-19 28 views
171

Cách chuyển sang cam kết Git cụ thể mà không làm mất tất cả các cam kết được thực hiện sau?Tạm thời chuyển bản sao làm việc sang một cam kết Git cụ thể

Tôi muốn các tệp cục bộ sẽ được thay đổi, nhưng cơ sở dữ liệu của cam kết sẽ vẫn nguyên vẹn, chỉ con trỏ vị trí hiện tại được đặt thành cam kết hiện được chọn.

Tôi muốn thay đổi trạng thái của tệp thành cam kết cụ thể, chạy dự án và khi hoàn tất, khôi phục tệp trở lại lần commit cuối cùng.

Cách thực hiện điều này mà không cần nén toàn bộ thư mục của dự án?

+0

Liên quan: [Hoàn nguyên về cam kết Git trước đó] (http://stackoverflow.com/q/4114095/456814). –

Trả lời

251

Nếu bạn đang ở một chi nhánh nhất định mybranch, chỉ cần tiếp tục và git checkout commit_hash. Sau đó, bạn có thể quay lại chi nhánh của mình theo số git checkout mybranch. Tôi đã có cùng một trò chơi chia một lỗi ngày hôm nay :) Ngoài ra, bạn nên biết về git bisect.

+1

Tôi nhận thấy rằng - đang thực hiện chính xác điều tôi muốn và không có cam kết nào bị mất. – Paul

+6

Lưu ý rằng bạn chỉ có thể thực hiện 'git checkout commit_hash' nếu bạn đang ở trên một kho lưu trữ sạch và không cần phân nhánh. Có thể dễ dàng hơn đối với một số trường hợp sử dụng (như của tôi). – enderland

+0

@enderland: HEAD của bạn luôn trỏ vào một số chi nhánh, thông thường :) –

39

Trước tiên, sử dụng git log để xem nhật ký, chọn cam kết bạn muốn, lưu ý xuống hàm băm sha1 được sử dụng để xác định cam kết. Tiếp theo, chạy git checkout hash. Sau khi bạn hoàn thành, git checkout original_branch. Điều này có lợi thế là không di chuyển HEAD, nó chỉ đơn giản là chuyển bản sao làm việc sang một cam kết cụ thể.

+4

Tôi nghĩ bạn có nghĩa là 'git checkout '. 'git checkout HEAD' thực sự là một NOOP –

+0

Tôi nhận thấy rằng việc đặt lại --hard đang thực hiện chính xác điều tôi muốn và không có cam kết nào bị mất. – Paul

+3

'git reset --hard ' thay đổi HEAD của nhánh hiện tại, trong khi với 'git checkout ', bạn sẽ nhận được thanh toán tách rời không thay đổi bất kỳ chi nhánh nào và bạn có thể dễ dàng trả lại mà không biết ID băm ban đầu của chi nhánh như được hiển thị trong câu trả lời này. – jofel

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