HocTotGit.io

Lệnh tiện ích (Utility Commands)
  • Cherry Pick
  • Stash
  • Tagging
Liên kết
Blog
Hỗ trợ

Email: work.lamsun@gmail.com

Yêu thích nền tảng

Hãy chia sẻ ý kiến của bạn

HocTotGit.io

© 2026 HocTotGit.

Cherry Pick

1. Tổng quan

Git cherry-pick cho phép bạn sao chép các thay đổi từ một commit cụ thể sang một branch đích. Không giống như merge hoặc rebase, cherry-pick cho phép tích hợp chọn lọc các thay đổi riêng lẻ mà không cần phải hợp nhất toàn bộ branch. Điều này rất hữu ích khi bạn chỉ muốn lấy những sửa lỗi hoặc tính năng riêng biệt.


2. Quy trình Cherry-pick cơ bản

2.1. Chọn commit

Bắt đầu bằng cách lấy mã hash của commit (hoặc các commit) bạn muốn pick:

git log <branch-name> --oneline

Lệnh này sẽ hiển thị danh sách các commit với hash ngắn gọn và message, giúp bạn dễ dàng xác định commit cần cherry-pick.

2.2. Chọn branch đích

Cherry-pick sẽ sao chép các commit đã chọn lên branch hiện tại, vì vậy hãy đảm bảo bạn đã checkout branch đích trước khi cherry-pick:

git switch <target-branch>

2.3. Thực thi Cherry-pick

Sử dụng lệnh git cherry-pick để sao chép commit đã chọn lên branch hiện tại:

git cherry-pick <commit-hash>

3. Cảnh báo về merge conflicts

Cảnh báo:

Cherry-pick sẽ áp dụng các thay đổi chứa trong một (hoặc nhiều) commit lên branch hiện tại. Nếu những thay đổi trong các commit bạn cherry-pick bị xung đột với những thay đổi trên branch hiện tại, bạn sẽ gặp phải merge conflict.

Khi gặp xung đột, Git sẽ tạm dừng thao tác cherry-pick và yêu cầu bạn giải quyết xung đột thủ công. Sau khi giải quyết xong, bạn có thể tiếp tục bằng:

git cherry-pick --continue

Hoặc nếu muốn hủy bỏ và quay lại trạng thái ban đầu:

git cherry-pick --abort

4. Các biến thể của Cherry-pick

4.1. Pick nhiều commit

Để cherry-pick nhiều commit riêng lẻ, hãy truyền từng mã hash của commit cho git cherry-pick như bên dưới:

git cherry-pick <commit-1-hash> <commit-2-hash>

Các commit sẽ được áp dụng theo thứ tự chúng xuất hiện. Trong ví dụ trên, commit-1 sẽ được pick trước, sau đó là commit-2 và cứ thế tiếp tục.

4.2. Pick một phạm vi commit

Git cung cấp nhiều cú pháp khác nhau để chọn phạm vi các commit. Ví dụ, để cherry-pick một phạm vi các commit, hãy sử dụng cú pháp ~.. như bên dưới:

git cherry-pick <commit-1-hash>~..<commit-2-hash>

Lệnh này hướng dẫn Git pick tất cả các commit xuất hiện giữa commit-1 và commit-2 (bao gồm cả hai).

Lưu ý: Cú pháp ~.. có nghĩa là từ commit ngay trước commit-1 (do ~ đại diện cho commit cha) đến commit-2. Nếu bạn muốn bao gồm cả commit-1, hãy sử dụng:

git cherry-pick <commit-1-hash>^..<commit-2-hash>

5. Cherry-pick Conflicts

Xung đột merge có thể phát sinh nếu các thay đổi được giới thiệu bởi một commit đã cherry-pick can thiệp vào các commit trên branch đích. Trong các tình huống xung đột này, Git sẽ tạm dừng thao tác cherry-pick và yêu cầu giải quyết xung đột thủ công.

Để tiếp tục, hãy giải quyết và stage các file bị xung đột. Sau đó tiếp tục bằng cách thực thi:

git cherry-pick --continue

Thay vì giải quyết, bạn cũng có thể hủy bỏ và quay lại bằng cách chạy:

git cherry-pick --abort

Quy trình giải quyết xung đột khi cherry-pick tương tự như giải quyết merge conflict: bạn cần mở các file bị xung đột, chỉnh sửa để giải quyết xung đột, sau đó stage các file đã sửa và tiếp tục cherry-pick.


6. Lưu ý

  • Cherry-pick tạo ra các commit mới với nội dung giống như commit gốc, nhưng với hash khác nhau vì chúng có parent khác nhau.

  • Cherry-pick hữu ích khi bạn chỉ muốn áp dụng một số commit cụ thể từ một branch sang branch khác mà không muốn merge toàn bộ branch.

  • Hãy cẩn thận khi cherry-pick các commit đã được chia sẻ, vì điều này có thể tạo ra các commit trùng lặp trong lịch sử.

  • Nếu bạn cherry-pick một commit đã tồn tại trong branch đích (theo nội dung), Git sẽ báo lỗi. Bạn có thể sử dụng cờ --allow-empty nếu cần.


Tổng kết

Cherry-pick cho phép bạn chọn lọc và sao chép các commit cụ thể từ branch này sang branch khác một cách chính xác. Quy trình cơ bản bao gồm ba bước: chọn commit, chọn branch đích, và thực thi cherry-pick. Bạn cũng có thể cherry-pick nhiều commit hoặc một phạm vi commit, và giải quyết xung đột nếu chúng phát sinh.

Cherry-pick là một công cụ mạnh mẽ để quản lý các thay đổi một cách chọn lọc, đặc biệt hữu ích khi bạn chỉ muốn áp dụng một số sửa lỗi hoặc tính năng cụ thể mà không merge toàn bộ branch.

Tiếp theo: Stash