Cherry-Pick là gì, khi nào cần sử dụng và các sử dụng thực tế như thế nào. Hãy cùng JP tìm hiểu trong bài viết hôm nay.
1. Khi nào cần sử dụng?
Trong quá trình phát triển dự án trong thực tế các bạn sẽ gặp tình huống ví dụ trong một sprint có 5 tính năng, tuy nhiên khác hàng lại yêu cầu chỉ release 3 tính năng trong version này thôi.
Vậy lúc này các bạn sẽ làm gì? Xóa code 2 chức năng kia? Revert lại code? Các giải pháp trên đều không ổn một chút nào. Và lúc này là lúc cherry-pick phát huy tác dụng.
Cherry-pick giúp chúng ta có thể chọn lọc một vài tính năng để đưa lên master release chứ không cần merge toàn bộ code đã commit
2. Cú pháp cơ bản
Cú pháp cơ bản của lệnh cherry-pick là:
git cherry-pick <commit-hash>
Bạn cần thay thế <commit-hash>
bằng mã băm (hash) của commit mà bạn muốn áp dụng.
Để xem lại các commit thì các bạn dùng lệnh git log --oneline
Đây là cú pháp đơn giản nhất của cherry-pick. Có một số cú pháp mở rộng để các bạn sử dụng tùy trường hợp:
- pick nhiều commit cùng lúc
git cherry-pick <commit-hash_1> <commit-hash_2> <commit-hash_3>...
- pick nhiều commit bằng cách dùng range. Pick từ commit 1 đến commit 10
git cherry-pick <commit-hash_1>^..<commit-hash_10>
Ngoài ra để bỏ qua các commit rỗng do github tạo tự động các bạn thêm option git cherry-pick -m 1 --no-commit <commit-hash>
Các bạn có thể tham khảo thêm các option khác tại đây https://git-scm.com/docs/git-cherry-pick
Lý thuyết thì đơn giản như vậy, giờ chúng ta cùng thực hành thử một ví dụ đơn giản để hiểu rõ hơn
3. Ví dụ
Giả sử bạn đang làm việc trên nhánh develop
và muốn lọc lại một số commit để đưa lên production
Giả sử các commit trên develop
như sau. Dùng lệnh git log --oneline
2c75e31 feature-05 done
bacea3a feature-04 done
ad8bb7c feature-03 done
762ee13 feature-02 done
e6ca6d9 feature-01 done
818f201 init
3.1. Áp dụng 1 commit
Yêu cầu hãy deploy tính năng feature-01, và feature-03
git checkout -b deploy_20240911 develop e6ca6d9
git cherry-pick ad8bb7c
3.2. Cherry-pick nhiều commit
Bạn cũng có thể áp dụng nhiều commit cùng lúc bằng cách sử dụng dấu ..
hoặc liệt kê các commit riêng lẻ:
git cherry-pick e6ca6d9^..ad8bb7c
git cherry-pick e6ca6d9 762ee13 ad8bb7c
Hai câu lệnh trên cho ra kết quả như nhau
3.3. Giải quyết xung đột
Khi cherry-pick một commit, có thể xảy ra xung đột nếu mã nguồn đã thay đổi từ commit gốc. Khi đó, bạn cần giải quyết xung đột giống như khi thực hiện merge:
git cherry-pick e6ca6d9
# Nếu có xung đột:
git status
git mergetool
# Sau khi giải quyết xung đột:
git cherry-pick --continue
4. Tổng kết lại
Git cherry-pick là một công cụ hữu ích khi bạn cần chọn lọc các thay đổi cụ thể từ các nhánh mà không cần phải merge toàn bộ nhánh. Hiểu rõ và sử dụng đúng cách lệnh cherry-pick sẽ giúp bạn quản lý mã nguồn dễ dàng hơn, đặc biệt trong các dự án lớn với nhiều nhánh phát triển.
P/S: Mình quên một điều quan trọng nhắc các bạn. Để có thể cherry pick chuẩn, không bị nhầm lẫn các bạn cần tuân thủ các quản lý git chuẩn chỉnh, tham khảo bài viết này của mình Gitflow cho dự án thực tế