Đọc lại câu hỏi, có vẻ như bạn muốn hoàn nguyên các thay đổi trong cây đang hoạt động và không thay đổi trước đây nhưng một số câu trả lời khác khiến cho âm thanh như đọc của tôi có thể sai. Bạn có thể làm rõ?
Nếu những thay đổi chỉ trong bản sao làm việc của bạn thì cách đơn giản nhất để làm điều này là giai đoạn thay đổi bạn muốn giữ lại với:
git add -i <file>
Sau đó, vứt bỏ những thay đổi mà bạn không muốn giữ bằng cách xem phiên bản chỉ số:
git checkout -- <file>
Sau đó unstage những thay đổi nếu bạn không muốn họ dàn dựng nào:
git reset -- <file>
Công thức này chỉ chuyển đổi các thay đổi đã chọn thành tệp (hoặc các tệp mà bạn chỉ định) và không tạo bất kỳ cam kết tạm thời nào mà sau đó cần hoàn nguyên.
Nếu bạn muốn có chọn lọc chỉ áp dụng một số thay đổi được thực hiện trong cam kết trước đó thì bạn có thể thiết lập lại một tập tin vào một nhà nước đã cam kết trước đây đầu tiên:
git reset <commit_before_first_unwanted_change> -- <file>
Sau đó, bạn có thể làm theo các công thức trước đây của git add -i <file>
đến giai đoạn những thay đổi mà bạn muốn giữ lại, git checkout -- <file>
để vứt bỏ những thay đổi không mong muốn và git reset -- <file>
để 'thay đổi' các thay đổi.
Nguồn
2009-07-10 15:32:12
này sẽ cam kết những thay đổi mà tôi muốn giữ phải không? Tôi không muốn thực hiện những thay đổi đó. mm có lẽ tôi đang cam kết quá nghiêm túc. Có lẽ tôi nên thư giãn bây giờ vì nó là tất cả trong một repo địa phương. btw git reset --soft HEAD^làm gì? – Pradeep
"git reset --soft HEAD ^" hoàn tác một cam kết theo nghĩa là nó giữ thư mục và chỉ mục hoạt động giống như nó và di chuyển nhánh nhánh hiện tại trở lại. –
Cảm ơn Jakub. Paolo tại sao một soft reset lại đầu - 1 được yêu cầu ở đây? cam kết một phần và thiết lập lại khó khăn là đủ không phải là nó để giữ một số thay đổi và loại bỏ những người khác? – Pradeep