Tìm Hiểu Về Cherry-Pick Trong Git
Khi ai đó yêu cầu thực hiện cherry-pick một commit trên nhánh dev về nhánh master sử dụng Git thì chính xác thì điều đó có nghĩa là gì? Nếu bạn nhận được yêu cầu tương tự như trên mà chưa biết phải làm gì thì hãy tham khảo bài viết ngắn này vì thuật ngữ này cũng không khó hiểu như cách phát ...
Khi ai đó yêu cầu thực hiện cherry-pick một commit trên nhánh dev về nhánh master sử dụng Git thì chính xác thì điều đó có nghĩa là gì?
Nếu bạn nhận được yêu cầu tương tự như trên mà chưa biết phải làm gì thì hãy tham khảo bài viết ngắn này vì thuật ngữ này cũng không khó hiểu như cách phát âm dài dòng của nó.
Lưu ý: Bạn cần nắm được cơ bản về nhánh (branch) và merge trong Git trước khi tham khảo phần tiếp theo.
Cherry-Pick Là Gì
Bỏ qua cách phát âm phức tạp thì cherry-pick thực chất là một cách để checkout một commit tại branch nhất định về branch hiện tại. Hay nói một cách dân dã thì cherry-pick dùng để bưng các thay đổi trong một commit trên một nhánh nào đó áp dụng về nhánh hiện tại.
Ví dụ trên repo (local) trên máy của bạn có hai nhánh là master và một nhánh feature-dev dùng để phát triển một tính năng thanh toán online. Để phát triển tính năng này bạn cần làm các công việc nhỏ sau:
- Thanh toán bằng thẻ ngân hàng qua ví Payoo.
- Thanh toán bằng thẻ ngân hàng thông qua Ngân Lượng.
- Thanh toán bằng Visa.
Sau đó bạn chuyển qua nhánh feature-dev để bắt đầu phát triển từng phần của tính năng. Tuy nhiên sau đó không lâu thì bạn nhận được yêu cầu của sếp deploy gấp phiên bản mới để demo cho khách hàng. Lúc này bạn mới chỉ hoàn thành xong 2 phần đầu là Thanh toán bằng thẻ ngân hàng qua ví Payoo và Thanh toán bằng thẻ ngân hàng thông qua Ngân Lượng trong tính năng mới này.
Khi xem log trên nhánh feature-dev của bạn với 7 commit gần nhất có kết quả như sau:
-> ... ... -> commit hash: A1 bắt đầu implement Payoo -> commit hash: A2 fix bug -> commit hash: A3 xong Payoo -> commit hash: B1 bắt đầu implement Ngân Lượng -> commit hash: B2 fix bug -> commit hash: B3 xong Ngân Lượng -> commit hash: C1 bắt đầu implement Visa
Để đảm bảo khách hàng vẫn thấy được các tính năng thanh toán Payoo và Ngân Lượng bạn muốn lấy commit B3 để áp dụng vào nhánh master. Lúc này bạn sẽ sử dụng cherry-pick của Git.
Đầu tiên bạn cần checkout về nhánh master:
$ git checkout master
Và sau đó thực hiện việc pick:
$ git cherry-pick B3
Lúc này nhánh master sẽ áp dụng các thanh đổi trong commit B3 về nhánh master.
So Sánh Cherry-Pick và Merge
Một tính năng trong Git khá giống với cherry-pick đó là merge branch.
Khi muốn merge các thanh đổi có trong nhánh feature-dev về nhánh master chúng ta sẽ làm các bước như sau.
Đầu tiên checkout về nhánh master:
$ git checkout master
Và sau đó thực hiện việc merge nhánh feature-dev về nhánh master:
$ git merge feature-dev
Khác biệt khi bạn thực hiện động tác merge branch như trên đó là Git sẽ áp dụng các thanh đổi của commit mới nhất trong nhánh feature-dev về nhánh master. Nghĩa là Git sẽ lấy các thanh đổi trong commit C1 và áp dụng về nhánh master.