Điều cốt lõi mà bạn sẽ muốn ở đây là git add -p
( -p
là một từ đồng nghĩa với --patch
). Điều này cung cấp một cách tương tác để kiểm tra nội dung, cho phép bạn quyết định xem mỗi hunk có nên vào hay không và thậm chí cho phép bạn chỉnh sửa bản vá theo cách thủ công nếu cần.
Để sử dụng kết hợp với cherry-pick:
git cherry-pick -n <commit> # get your patch, but don't commit (-n = --no-commit)
git reset # unstage the changes from the cherry-picked commit
git add -p # make all your choices (add the changes you do want)
git commit # make the commit!
(Cảm ơn Tim Henigan đã nhắc nhở tôi rằng git-cherry-pick có tùy chọn --no-commit và cảm ơn Felix Rabe vì đã chỉ ra rằng bạn cần đặt lại! , bạn có thể sử dụng git reset <path>...
để hủy bỏ các tệp đó.)
Tất nhiên bạn có thể cung cấp các đường dẫn cụ thể đến add -p
nếu cần thiết. Nếu bạn đang bắt đầu với một bản vá, bạn có thể thay thế cherry-pick
bằng apply
.
Nếu bạn thực sự muốn một git cherry-pick -p <commit>
(tùy chọn đó không tồn tại), bạn có thể sử dụng
git checkout -p <commit>
Điều đó sẽ khác với cam kết hiện tại so với cam kết bạn chỉ định và cho phép bạn áp dụng các hunk từ riêng lẻ đó. Tùy chọn này có thể hữu ích hơn nếu cam kết mà bạn thực hiện có xung đột hợp nhất trong một phần của cam kết mà bạn không quan tâm. (Tuy nhiên, lưu ý checkout
khác với cherry-pick
: checkout
cố gắng áp dụng <commit>
hoàn toàn nội dung, cherry-pick
áp dụng khác biệt của cam kết được chỉ định từ cha mẹ của nó. Điều này có nghĩa là checkout
có thể áp dụng nhiều hơn chỉ cam kết đó, có thể nhiều hơn bạn muốn.)