Menu
CoddyTech

Git Cherry-pick

Cập nhật lần cuối

git cherry-pick chép các thay đổi từ một hoặc vài commit cụ thể và áp dụng chúng lên nhánh hiện tại dưới dạng commit mới. Đây là cách lấy riêng một bản sửa lỗi từ nhánh khác mà không phải merge cả nhánh đó, rất hữu ích khi cần đưa một hotfix về nhánh cũ hoặc tách một commit ra khỏi nhánh feature.

Thử các lệnh này trong playground terminal: một shell thật ngay trên trình duyệt, không cần cài đặt gì.

git cherry-pick sao chép một commit được chọn từ nhánh khác và áp dụng nó vào nhánh hiện tại của bạn.

Cú pháp

LệnhTác dụng
git cherry-pick <hash>Áp dụng một commit lên nhánh hiện tại
git cherry-pick <a> <b>Áp dụng lần lượt nhiều commit
git cherry-pick <a>..<b>Áp dụng một dải commit (không gồm a)
git cherry-pick -n <hash>Áp dụng thay đổi nhưng chưa commit
git cherry-pick -x <hash>Ghi lại commit gốc trong message

Trong lúc cherry-pick

Nếu cherry-pick gặp xung đột, hãy giải quyết rồi tiếp tục.

LệnhTác dụng
git cherry-pick --continueTiếp tục sau khi đã giải quyết xung đột
git cherry-pick --abortHủy và khôi phục nhánh
git cherry-pick --skipBỏ qua commit hiện tại

Ví dụ minh họa

BướcLệnhKết quả
1git log --oneline hotfixTìm hash của bản sửa lỗi, ví dụ a1b2c3d
2git switch mainChuyển sang nhánh cần nhận bản sửa lỗi
3git cherry-pick a1b2c3dÁp dụng bản sửa lỗi vào main thành một commit mới với hash mới

Câu hỏi thường gặp về git cherry-pick

git cherry-pick dùng để làm gì?

Lệnh này lấy các thay đổi mà một commit cụ thể đưa vào và áp dụng chúng lên nhánh hiện tại thành một commit hoàn toàn mới (với hash mới). Khác với merge hay rebase, nó không mang theo cả một nhánh mà chỉ lấy đúng commit hoặc các commit bạn chỉ định.

Khi nào nên dùng cherry-pick?
Dùng khi bạn cần một commit cụ thể ở chỗ khác, chẳng hạn đưa một bản sửa bug từ main về nhánh release, hoặc lấy riêng một commit hữu ích ra khỏi nhánh feature mà không merge mọi thứ. Nếu bạn muốn cả nhánh, hãy dùng merge hoặc rebase.
Làm sao để cherry-pick nhiều commit?
Liệt kê chúng: git cherry-pick <a> <b> <c> áp dụng lần lượt từng commit. Với một dải commit liên tiếp, dùng git cherry-pick <start>..<end>, lệnh này áp dụng mọi commit sau start cho đến hết end. Viết <start>^..<end> nếu bạn muốn lấy cả chính start.
Nếu cherry-pick gây ra xung đột thì sao?
Git tạm dừng và đánh dấu các tệp bị xung đột. Bạn giải quyết chúng, chạy git add cho kết quả, rồi chạy git cherry-pick --continue. Để rút lui hoàn toàn, dùng git cherry-pick --abort, lệnh này đưa nhánh về trạng thái trước khi bắt đầu cherry-pick.
Làm sao để cherry-pick một commit từ nhánh khác?
Tìm hash của commit bằng git log --oneline <other-branch>, chuyển sang nhánh cần nhận commit, rồi chạy git cherry-pick <hash>. Bạn cũng có thể truyền tên nhánh, như git cherry-pick feature, để lấy commit ở đầu nhánh đó.
Cherry-pick và merge khác nhau thế nào?
git merge mang về mọi commit của một nhánh và ghi lại điểm các lịch sử nhập vào nhau. Cherry-pick chỉ chép những commit bạn chỉ định, thành commit mới, không có liên kết nào về commit gốc. Hãy merge khi bạn muốn cả nhánh; cherry-pick khi bạn chỉ cần một hai commit.
Có thể luyện tập lệnh này online không?
Có. Mở playground terminal để chạy git cherry-pick trong một shell thật ngay trên trình duyệt, không cần cài đặt gì. Khóa học Git tương tác miễn phí của Coddy cũng hướng dẫn chuyển commit giữa các nhánh từng bước.
Hình minh họa các ngôn ngữ lập trình của Coddy

Học Git cùng Coddy

Bắt đầu