Các câu trả lời được đưa ra cho đến nay không lý tưởng bởi vì chúng đòi hỏi rất nhiều công việc không cần thiết để giải quyết xung đột hợp nhất, hoặc chúng đưa ra quá nhiều giả định thường sai. Đây là cách để làm điều đó một cách hoàn hảo. Liên kết là trang web của riêng tôi.
Bạn có những thay đổi không được cam kết my_branch
mà bạn muốn cam kết master
, mà không cam kết tất cả các thay đổi từ đó my_branch
.
Thí dụ
git merge master
git stash -u
git checkout master
git stash apply
git reset
git add example.js
git commit
git checkout .
git clean -f -d
git checkout my_branch
git merge master
git stash pop
Giải trình
Bắt đầu bằng cách sáp nhập master
vào chi nhánh của bạn, vì cuối cùng bạn sẽ phải làm điều đó và bây giờ là thời điểm tốt nhất để giải quyết mọi xung đột.
Các -u
tùy chọn (aka --include-untracked
) trong git stash -u
ngăn chặn bạn khỏi mất file untracked khi sau này bạn làm git clean -f -d
trong vòng master
.
Sau git checkout master
đó, điều quan trọng là bạn KHÔNG git stash pop
, bởi vì bạn sẽ cần stash này sau. Nếu bạn bật stash tạo ra trong my_branch
và sau đó làm git stash
trong master
, bạn sẽ gây ra xung đột nhập không mong muốn khi sau đó bạn áp dụng stash rằng trong my_branch
.
git reset
unstages tất cả mọi thứ kết quả từ git stash apply
. Ví dụ: các tệp đã được sửa đổi trong ngăn chứa nhưng không tồn tại trong master
được dàn dựng là xung đột "bị xóa bởi chúng tôi".
git checkout .
và git clean -f -d
loại bỏ mọi thứ không được cam kết: tất cả các thay đổi đối với các tệp được theo dõi và tất cả các tệp và thư mục chưa được theo dõi. Chúng đã được lưu trong ngăn chứa và nếu để lại master
sẽ gây ra xung đột hợp nhất không cần thiết khi chuyển trở lại my_branch
.
Cái cuối cùng git stash pop
sẽ dựa trên bản gốc my_branch
, và do đó sẽ không gây ra bất kỳ xung đột hợp nhất nào. Tuy nhiên, nếu stash của bạn chứa các tệp chưa được bẻ khóa mà bạn đã cam kết làm chủ, git sẽ phàn nàn rằng nó "Không thể khôi phục các tệp không bị theo dõi từ stash". Để giải quyết mâu thuẫn này, xóa các tập tin từ cây làm việc của bạn, sau đó git stash pop
, git add .
và git reset
.