Bạn muốn lấy thay đổi của một commit sang nhánh hiện tại nhưng cần review trước khi quyết định tạo commit mới. git cherry-pick --no-commit có thể phục vụ luồng đó. Cần hiểu rằng “không tạo commit” vẫn là thao tác ghi vào index và working tree.
Các lệnh đã được chạy bằng Git 2.54.0 trong repository tạm, với cấu hình global/system được cô lập khi kiểm tra biên tập. Tài liệu Git được đọc ngày 03/11/2026. Không chạy cherry-pick trên workspace blog, không fetch hoặc push; fixture không kiểm thử merge commit hay xung đột.
Tạo một commit sửa file trên nhánh riêng
Đoạn Bash chạy trong subshell, tạo thư mục bằng mktemp và in đường dẫn để bạn xem tiếp. Nó không xóa repository thử sau khi chạy:
(
set -eu
demo_dir=$(mktemp -d)
echo "$demo_dir"
cd "$demo_dir"
git init -q -b main
git config user.name 'AeDev Demo'
git config user.email '[email protected]'
git config commit.gpgsign false
printf 'version one\n' > note.txt
git add note.txt
git -c core.hooksPath=/dev/null commit -qm 'Base note'
base_commit=$(git rev-parse HEAD)
git switch -qc change-note
printf 'version two\n' > note.txt
git add note.txt
git -c core.hooksPath=/dev/null commit -qm 'Change note'
change_commit=$(git rev-parse HEAD)
git switch -q main
git cherry-pick --no-commit "$change_commit"
test "$(git rev-parse HEAD)" = "$base_commit"
git status --short
git diff --cached -- note.txt
git diff -- note.txt
cat note.txt
)
Fixture đã chạy thành công: HEAD vẫn bằng base commit, status có M note.txt, phần diff staged đổi version one thành version two, diff unstaged rỗng và file hiện tại chứa version two. Không có commit thứ ba được tạo trong nhánh main.
Hai biến commit trong bài là giá trị được lấy thật từ repository thử, không phải hash placeholder cần đoán. Các thiết lập tên, email, ký commit và hook chỉ áp dụng cho demo hoặc lần commit được chỉ định, không chỉnh cấu hình toàn máy.
Đọc đúng kết quả trước khi làm tiếp
Flag --no-commit, viết ngắn là -n, áp dụng thay đổi vào index và working tree. Trong fixture sạch, kết quả đã stage sẵn nên git diff thông thường không cho thấy patch; cần xem git diff --cached.
Đây không phải cách xem một commit chỉ đọc. Nếu mục tiêu chỉ là đọc patch, dùng công cụ xem lịch sử phù hợp thay vì áp dụng thay đổi. Trước khi dùng trên nhánh công việc thật, đọc status và bảo quản phần đang sửa theo workflow của nhóm.
Tài liệu cho phép index ban đầu không trùng HEAD trong chế độ này. Điều đó không có nghĩa trộn sẵn thay đổi là dễ review. Demo chủ ý bắt đầu sạch để tách rõ tác động của đúng một commit.
Quyết định commit là một bước riêng
Sau khi xem patch và chạy kiểm tra cần thiết trong project thật, bạn có thể tạo commit theo chính sách repository. Bài dừng trước bước đó để giữ rõ mục tiêu kiểm chứng HEAD chưa đổi. Không tự suy rằng cherry-pick sạch đồng nghĩa bản sửa đúng chức năng trên nhánh đích.
Commit gốc cũng không tự trở thành tổ tiên của nhánh main chỉ vì nội dung của nó đã được áp dụng vào index. Nếu sau này bạn tạo commit mới, cần phân biệt lịch sử commit với sự tương đương của một phần thay đổi.
Nếu có xung đột hoặc patch không còn phù hợp
Fixture không tạo conflict, nên không có kết quả chạy để báo về quy trình phục hồi conflict. Trên repository thật, dừng lại, đọc git status và xem Git có đang giữ trạng thái cherry-pick hay không trước khi chọn tiếp tục hoặc hủy theo tài liệu.
Đừng chạy hàng loạt lệnh reset hoặc abort chỉ vì muốn “dọn sạch” mà chưa biết chúng sẽ tác động đến phần sửa nào. Nếu áp dụng thành công với --no-commit, patch trong index vẫn cần quyết định riêng; nó không nhất thiết còn là một chuỗi cherry-pick đang chờ để abort.
Hiểu HEAD, index và working tree sau lệnh giúp bạn review có chủ đích. Dùng repository tạm để kiểm chứng trước, rồi mới đưa cách làm vào quy trình lấy bản sửa của nhóm.


