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ì? Bạn có thắc mắc Cherry pick là gì không, nếu có hãy đọc bài viết này nhé

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í Payoneer.
  • 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í Payoneer 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 Payoneer
-> 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 Payoneer 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.

Viết câu trả lời

Drop Images

0 Bình luận