git cherry-pick

目的

在一个分支上进行了一个或多个提交时,将来某一天突然发现在另外一个分支上也需要进行相同改动,此种情况下如何尽快达到目标。
举例场景:
	在 在维护branch1上修改了bug,而修改该bug commit了一个或者多个提交
	将来某天在 在维护branch2上也需要进行该bug的修改
	此时可以使用cherry-pick将修改bug的一个或者多个commit同步过来。

方法演示

pick一个commit

# branch1
be17f7f (branch1) 1
cb86ba1 (HEAD -> branch2, master) bak a
a119a6c (tag: v1.0) backup
# branc: branch2
cb86ba1 (HEAD -> branch2, master) bak a
a119a6c (tag: v1.0) backup

观看log记录可知branch1比branch2多一个提交,将branch1的最后一个提交添加到branch2中,可使用命令
git cherry-pick commit_id

$ git cherry-pick be17f7f
[branch2 974d4e9] 1
 Date: Tue Apr 26 11:38:17 2022 +0800
 1 file changed, 1 insertion(+), 1 deletion(-)

此时branch2中存在commit(be17f7f)

974d4e9 (HEAD -> branch2) 1
cb86ba1 (master) bak a
a119a6c (tag: v1.0) backup

pick多个commit

$ git log branch1 --oneline
2e443af (branch1) 4
79941fe 3
5008ccd 2
be17f7f 1
cb86ba1 (master) bak a
a119a6c (tag: v1.0) backup

$ git log branch2 --oneline
974d4e9 (HEAD -> branch2) 1
cb86ba1 (master) bak a
a119a6c (tag: v1.0) backup

此时branch1比branch2多三个commit,2,3,4,将多个commit pick过来的方法为git cherry-pick commit_id1..commit_id2,获取得到的commit为(commit_id1, commit_id2],即commit_id1后直到commit_id2之间的提交

$ git cherry-pick 5008ccd..2e443af
Auto-merging a
[branch2 81d11b2] 3
 Date: Tue Apr 26 13:39:07 2022 +0800
 1 file changed, 1 insertion(+)
Auto-merging a
[branch2 bb2e941] 4
 Date: Tue Apr 26 13:39:14 2022 +0800
 1 file changed, 1 insertion(+)

$ git log branch2 --oneline
bb2e941 (HEAD -> branch2) 4
81d11b2 3
974d4e9 1
cb86ba1 (master) bak a
a119a6c (tag: v1.0) backup

可看到此时是没有commid_id1的,也就是没有commit(5008ccd)。

将多个commit pick过来的方法为git cherry-pick commit_id1^..commit_id2,获取得到的commit为[commit_id1, commit_id2],即commit_id1开始到commit_id2之间的提交

$ git cherry-pick 5008ccd^..2e443af
[branch2 6cbfd17] 2
 Date: Tue Apr 26 13:38:59 2022 +0800
 1 file changed, 1 insertion(+)
[branch2 8916981] 3
 Date: Tue Apr 26 13:39:07 2022 +0800
 1 file changed, 1 insertion(+)
[branch2 a5947a7] 4
 Date: Tue Apr 26 13:39:14 2022 +0800
 1 file changed, 1 insertion(+)

$ git log branch2 --oneline
a5947a7 (HEAD -> branch2) 4
8916981 3
6cbfd17 2
974d4e9 1
cb86ba1 (master) bak a
a119a6c (tag: v1.0) backup

如上所示可达到目的将commit_id, (commit_id1, commit_id2],[commit_id2]一个或者多个提交pick到指定分支,可避免手动再改动一遍的辛苦,更能避免修改的不完成造成的隐患。

总结

git cherry-pick commit_id
git cherry-pick commit_id1..commit_id2
git cherry-pick commit_id1^..commit_id2
posted @ 2022-04-26 13:56  flxx  阅读(44)  评论(0编辑  收藏  举报