2012-02-03 35 views
6

Tôi đang gặp sự cố khi cố gắng hoàn nguyên tệp về cam kết trước đó, tôi biết mình có thể sử dụng git checkout để hoàn nguyên một tệp nhưng vấn đề là tôi có thay đổi trong tệp đó mà tôi muốn giữ. thế nào để làm một số loại "hợp nhất" giữa một cam kết trước đó và HEAD hiện tại cho một tập tin duy nhất? Tôi đã thử sử dụng git reset sha-of-my-commit path/to/my/file nhưng nó đặt phiên bản trước đó trong khu vực dàn dựng trong khi vẫn giữ phiên bản mới nhất trên thư mục làm việc của tôi không chắc chắn cách hợp nhất cả hai tệp sau khi nó.Cách hoàn nguyên tệp về phiên bản trước mà không ghi đè thay đổi hiện tại?

Điều tôi đã làm bây giờ chỉ là git diff ..sha-of-my-commit path/to/my/file và chỉ sao chép/dán các dòng bị thiếu nhưng tôi tin rằng phải có cách tốt hơn để làm điều này đúng không?

Trả lời

4

Giả sử bạn có nghĩa là những thay đổi trong cây công việc của bạn (không cam kết):

git stash 
git checkout previous-commit path/to/file 
git stash pop 

Nếu bạn đã phạm phải một số thay đổi, sau đó bạn vẫn có thể làm điều đó, với một công việc ít hơn. Giả sử lịch sử của bạn trông giống như sau:

- x - A - x - x - x - B - x - x (HEAD) 

nơi bạn muốn phiên bản tại A, cộng với những thay đổi từ B bật. Sau đó, hãy thực hiện việc này:

git stash 
git checkout B path/to/file 
git stash 
git checkout A path/to/file 
git stash pop 
git stash pop 

Lưu ý rằng bất kỳ ứng dụng stash nào, vì nó là một hoạt động hợp nhất, có thể dẫn đến xung đột hợp nhất; bạn nên tất nhiên giải quyết những người trước khi tiếp tục!

+0

Cảm ơn! Tôi hoàn toàn quên mất 'git stash' – javiervd

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