cherry pick là gì

Vấn đề

Hôm ni, bản thân bắt gặp một tình huống là cần thiết apply nằm trong 1 thay cho đổi(commit A) cho tất cả 2 branches nhập project của tôi. Chi tiết thì tiếp tục như vậy này: Mình đang được ghi chép 1 feature A, và feature này rất cần phải được apply nhập vào 2 branches (giả sử là branch X và branch Y). Và mình thích chỉ 1 thứ tự commit, tuy nhiên tiếp tục apply nhập cả hai branches X và Y.

Ở 1 tình huống khác: Giả sử bản thân đang khiến tác dụng quản lý và vận hành User (CRUD user ứng sẽ sở hữu được 4 commit) bên trên branch manage-users. thình lình người tiêu dùng đòi hỏi là cần thiết release vội vàng tác dụng show user. Nghĩa là bản thân cần thiết merge code commit show user nhập branch master.

Bạn đang xem: cherry pick là gì

Giải quyết

Đôi Lúc, tất cả chúng ta chỉ mong muốn lấy 1 hoặc n commits từ một brach cho vô master, hoặc commit 1 thứ tự và lên 2 branch, thì việc bản thân nghĩ về cho tới git merge hoặc rebase thì nhiều lúc vượt lên dư quá.

Vì sao bản thân lại trình bày như vậy:

Đối với git rebase/merged nó sẽ bị thực hiện như vậy nào? Vì so với git merge, Git tiếp tục tiến hành vận dụng những thay cho thay đổi của commit tiên tiến nhất nhập nhánh mình thích merge. Rõ rộng lớn tất cả chúng ta coi ví dụ và tế bào miêu tả cụ thể:

Mình cần thiết merge những thay cho thay đổi sở hữu nhập branch feature-A và brach master

// Tại branch feature-A
git log --oneline
-> ...
    ...
-> commit hash: c1
    fisnish C1
-> commit hash: c2
    fisnish C2
-> commit hash: c3
    fisnish C3

// Tại brach master
git merge feature-A

Với mệnh lệnh này, Git tiếp tục lấy toàn cỗ thay cho thay đổi nhập commit C3 của brach feature-A đi vào branch master. Tức là, git merge và git rebase thông thường được vận dụng fake thay cho thay đổi của nhìu commit lên 1 nhánh không giống. Như vậy, rõ rệt git merge hoặc git rebase ko thể xử lý được.

Để xử lý 2 tình huống bên trên, tất cả chúng ta tiếp tục nghe cho tới 1 nghệ thuật của git tư vấn là git cherry-pick

Git cherry-pick

Là một phương pháp để checkout 1 commit ngẫu nhiên bên trên 1 branch được chỉ định và hướng dẫn về branch thời điểm hiện tại. Hay đó là git cherry-pick tiếp tục bốc thay cho thay đổi của một commit bên trên 1 nhánh nào là cơ vận dụng nhập nhánh thời điểm hiện tại.

Xem thêm: Làm sao để phân biệt Yeezy 350 fake và real chuẩn nhất?

Cú pháp

git cherry-pick [--edit] [-n] [-m parent-number] [-s] [-x] [--ff]
		  [-S[<keyid>]] <commit>…
git cherry-pick --continue
git cherry-pick --quit
git cherry-pick --abort

Cùng coi thao tác ví dụ nào:

Lấy 1 commit từ một branch cho vô master

git checkout master

git cherry-pick feature-A~1

# Hoặc tất cả chúng ta hoàn toàn có thể chỉ định và hướng dẫn hash commit
git cherry-pick C2

Quá đơn giản và giản dị nhỉ, bên trên cơ, tức là tao đã lấy thay cho thay đổi của commit C2 nằm trong branch feature-A nhập branch master

Lấy n commits từ một brach cho vô master

Giả sử, giờ đây bản thân cần thiết fake n commits (giả sử ở đấy là 2 commits) thì bản thân thực hiện như sau:

# Nếu mong muốn thêm một vài ba commit, ko liên tục
git cherry-pick commit_id1 commit_id3

# Nếu mong muốn thêm một loạt commit theo thứ tự cạnh nhau
git cherry-pick commit_id1...commit_id5

# Với code bên trên, thì  commit_id1 tiếp tục ko được thêm thắt vào
# Để fake commit được xem nhập vào branch mong muốn thêm thắt thì 
git cherry-pick commit_id1^..commit_id5

1 thứ tự commit cho tất cả 2 branches

Commit A cần thiết apply mang đến 2 branchres là branch-X và branch-Y

# Đang ở branch-X, tiến hành commit muốn tạo đi ra commit A
git add -A
git commit -m " finish commit A"

# Checkout lịch sự branch Y và người sử dụng cherry-pick nào
git checkout branch-Y
git cherry-pick branch-X

Với mệnh lệnh này, cherry-pick tiếp tục lấy commit sau cùng ở branch branch-X và merge nhập branch branch-Y

Xem thêm: accident là gì

Fix conflict

Cũng như git merge hoặc rebase, git cherry-pick cũng xãy đi ra conflict nếu như xung đột code. việc của tất cả chúng ta chỉ đơn giản và giản dị là fix conflict tiếp sau đó dùng:

git add .
git commit

Như vậy là done.

Tham khảo

Bài ghi chép được tìm hiểu thêm từ không ít mối cung cấp nhập cơ sở hữu mối cung cấp đó là https://git-scm.com/docs/git-cherry-pick & https://backlog.com/git-tutorial/vn/stepup/stepup7_4.html