Đây là tình huống. Tôi đang làm việc trên chi nhánh master
. Tôi tạo file1 và commit. Tôi tạo file2 và cam kết. Rất tiếc. Tôi có thể muốn sử dụng file2, một ngày nào đó, nhưng nó chắc chắn không phải cái gì đó nên được đặt trong nhánh chính. Để tôi không bị mất tệp2, tôi sử dụnggit: Làm cách nào để ghi đè tất cả thay đổi cục bộ khi hợp nhất?
git checkout head~1
git branch new-branch
git checkout new-branch
để tôi có thể tiếp tục phát triển. Tôi thêm tệp3 vào số new-branch
. Nếu bạn đã chú ý, tôi có hai chi nhánh, master
có chứa "file1" và "file2" và new-branch
có chứa "file1" và "file3".
Bây giờ là lúc để có được những thay đổi tôi đã thực hiện lại vào nhánh chính. Cách tốt nhất để làm điều này là gì? Tôi chắc chắn muốn người đứng đầu chi nhánh master
chỉ vào các tệp khi chúng xuất hiện trong new-branch
, nhưng tôi cũng không muốn mất công việc tôi đã thực hiện trong tệp 2 bằng cách đặt lại, trong trường hợp tôi muốn sử dụng nó.
Hãy nhớ rằng đây là sự đơn giản hóa. Thay vì chỉ ba tập tin, tôi đã có một chục tập tin với hàng chục dòng mã được thay đổi trên tất cả các nơi với nhiều cam kết. Tôi chắc chắn hy vọng các giải pháp không phải là để làm một tập tin theo tập tin hợp nhất/kiểm tra, bởi vì đó sẽ là một nỗi đau rất lớn.
Bất kỳ ý tưởng nào?
Bạn nói "Điều này trông giống như những gì tôi cần", nhưng bạn đã thử chuyển nhánh như tôi chỉ ra trong câu trả lời của tôi? – VonC
Tôi đã làm. Câu trả lời của Randal thậm chí còn gần hơn với giải pháp của tôi. Nó chỉ ra chìa khóa là 'git reset --hard HEAD ~ 1'. Tôi đã không nhận ra bạn có thể thiết lập lại một chuỗi các cam kết với một lệnh. Tất cả những gì tôi cần làm là rẽ nhánh nhánh hiện tại, sau đó thiết lập lại nơi tôi bắt đầu trở nên tồi tệ. – kubi