Trong quá trình làm việc với Git, chắc hẳn đã có lúc bạn rơi vào tình huống: Bạn đang phát triển tính năng ở nhánh feature-A, nhưng sếp lại muốn bạn mang đúng một bản vá lỗi (bug fix) từ nhánh feature-B sang nhánh main ngay lập tức. Bạn không muốn gộp toàn bộ nhánh feature-B vì nó còn quá nhiều code dang dở.
Đây chính là lúc Git Cherry-pick tỏa sáng.
1. Git Cherry-pick là gì?
git cherry-pick là một lệnh cho phép bạn chọn một hoặc nhiều commit cụ thể từ một nhánh khác và áp dụng chúng vào nhánh hiện tại của bạn. Thay vì sử dụng merge hay rebase để kết hợp toàn bộ lịch sử của một nhánh, cherry-pick giúp bạn “lấy” chính xác những gì bạn cần.
2. Khi nào nên dùng Cherry-pick?
Đừng lạm dụng nó, nhưng hãy nhớ tới nó trong các trường hợp sau:
-
Hotfixes: Khi bạn phát hiện một lỗi nghiêm trọng trên nhánh
developvà cần đưa bản sửa lỗi đó lênproduction(nhánhmain) ngay mà không được phép mang theo các tính năng chưa hoàn thiện khác. -
Hợp tác nhóm: Đồng đội của bạn vừa viết một hàm tiện ích rất hay ở nhánh của họ, và bạn muốn dùng nó ngay cho công việc của mình.
-
Khôi phục commit: Đôi khi bạn lỡ tay xóa một nhánh nhưng nhớ được mã hash của commit quan trọng, bạn có thể “cherry-pick” nó về nhánh mới.
3. Cách sử dụng cơ bản
Cách dùng cực kỳ đơn giản. Đầu tiên, bạn cần biết commit hash (mã định danh) của commit muốn lấy.
Bước 1: Lấy mã commit
|
1 |
git log --oneline |
Bước 2: Chuyển sang nhánh đích ( Giả sử main là nhánh đích )
|
1 |
git checkout main |
Bước 3: Thực hiện “nhặt”
|
1 |
git cherry-pick <commit-hash> |
Tất nhiên, nếu muốn “nhặt” nhiều
|
1 2 3 4 5 6 7 8 |
# Pick nhiều commit riêng lẻ git cherry-pick abc123 def456 ghi789 # Pick một dải commit (không bao gồm start, bao gồm end) git cherry-pick abc123..ghi789 # Pick một dải commit (bao gồm cả start) git cherry-pick abc123^..ghi789 |
4, Xử lý Conflict
Giống như merge, cherry-pick có thể gặp conflict. Đây là cách xử lý:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# Khi có conflict, Git sẽ dừng lại và báo git cherry-pick <hash> # error: could not apply abc1234... feat: add payment module # 1. Xem file bị conflict git status # 2. Sửa conflict trong file # 3. Đánh dấu đã giải quyết git add . # 4. Tiếp tục cherry-pick git cherry-pick --continue # Hoặc hủy bỏ nếu muốn quay lại trạng thái ban đầu git cherry-pick --abort |
5, Những điều cần lưu ý
Dù rất tiện lợi, nhưng đừng lạm dụng cherry-pick vì nó có thể gây ra những hệ quả sau:
-
Duplicate Commits: Cherry-pick tạo ra một commit mới có nội dung y hệt nhưng mã Hash khác. Điều này làm lịch sử Git của bạn xuất hiện 2 commit giống hệt nhau, dễ gây nhầm lẫn khi merge các nhánh về sau.
-
Mất dấu vết lịch sử: Nếu bạn cherry-pick quá nhiều, bạn sẽ khó theo dõi được commit đó gốc gác từ tính năng nào, nhánh nào.
Lời khuyên: Chỉ dùng cherry-pick khi thực sự cần thiết (như Hotfix). Nếu có thể dùng merge, hãy ưu tiên merge.
6, Kết luận
git cherry-pick là công cụ phẫu thuật trong bộ công cụ Git của bạn. Dùng đúng chỗ — hotfix, backport, commit nhầm nhánh — nó cực kỳ hiệu quả. Dùng sai chỗ, nó làm lịch sử Git của bạn trở nên rối rắm và khó bảo trì.
Nguyên tắc đơn giản: nếu bạn cần một vài commit cụ thể, hãy dùng cherry-pick. Nếu bạn cần toàn bộ nhánh, hãy dùng merge hay rebase.
Neartech xin trân trọng cảm ơn bạn đã quan tâm bài viết này! Nếu bạn gặp khó khăn gì hãy để lại comment ở bên dưới, nếu có thể mình sẽ giúp đỡ bạn!