Nhìn vào tiêu đề thì chắc hẳn các bạn cũng biết bài viết hôm nay sẽ đề cập tới vấn đề gì rồi chứ ha. Chuyện là cách đây vài hôm, trong lúc hì hục làm một chức năng mới cho dự án công ty, lúc này mình làm trên branch dev (ví dụ branch dev-feature
). Branch này chỉ tập trung các tính năng mới thôi. Lúc này sếp mới alo, bảo có bug này trên production, em fix gấp. Nghe sếp bảo gấp, nên mình gấp theo luôn. Hì hục fix bug, fix test oke hết rồi, commit luôn rồi, chuẩn bị push lên thì mới nhận ra, mình đang fix trên branch dev-feature
. Đáng nhẽ phải checkout qua branch production, rồi hotfix trên đó, vậy mà giờ fix trên branch này, chết chưa.
Giải pháp
Tới đây sau khi tìm hiểu một chút thì mình đã tìm ra giải pháp, đó là tính năng cherry-pick
của git:
Bước 1: Mở commit mà bạn đã commit ra, commit mà bạn muốn merge vào branch khác á. Sau đó copy hash của nó.
Ví dụ một hash của một commit: 8071f284ae9954078ab3e4ec6d9b44c6cb2431d1
của mình trên gitlab.

Bước 2: Checkout branch mà bạn muốn merge commit này tới
Ví dụ bạn muốn merge commit ở branch dev-feature
sang production
, hãy checkout git checkout production
.
Bước 3: Gõ lệnh sau
1 | git cherry-pick 8071f284ae9954078ab3e4ec6d9b44c6cb2431d1 -e -n |
-e
có nghĩa là edit message của commit này, bỏ-e
nếu bạn không cần sửa message-n
là không tự commit sau khi pick qua, nếu không thêm-n
, thì pick xong, nó sẽ tự động commit luôn.- … còn kha khá options nữa
Tóm lại
Cherry pick này khá lợi hại, có thể merge commit từ điểm này tới điểm kia sang branch khác, và còn nhiều cái hay ho nữa. Cơ mà về cơ bản đó là dùng commit id.
Hi vọng nó sẽ giúp ích cho các bạn. Thân.