Git:在不同仓库之间 Cherry Pick

假设我们有两个仓库:

1https://github.com/Kong/kong
2https://github.com/Kong/kong-ee

想把 kong 仓库的的 master 分支上的 PR https://github.com/Kong/kong/pull/10629 对应的 commit cherry-pick 到 kong-ee 的 cherry-pick/10629 分支,应该怎样做?

首先,确保已经将 Kong/kong 和 Kong/kong-ee 两个仓库克隆到本地:

1git clone https://github.com/Kong/kong.git
2git clone https://github.com/Kong/kong-ee.git

进入 Kong/kong 仓库,切换到 master 分支:

1git switch master

更新到最新内容:

1git pull

找到 PR #10629 对应的 commit 哈希值。可以通过访问 PR 页面并查看 “Commits” 标签下的 commit 信息,或者使用以下命令查找 PR 对应的 commit(将 <pr_id> 替换为实际的 PR 编号):

1git log --pretty=oneline --graph --grep="#<pr_id>"

找到对应的 commit 哈希值,例如,将这个哈希值称为 <commit_hash>

我这里是 b41d5bb05b35c5d52f9e87d8d96660719e85896a

然后切换到 kong-ee 仓库

1cd ../kong-ee

添加 kong remote

1git remote add kong https://github.com/Kong/kong

获取远程仓库的最新改动

1git fetch kong

切换到需要 cherry-pick 的分支:

1git checkout -b cherry-pick/10629

执行 cherry-pick

1git cherry-pick b41d5bb05b35c5d52f9e87d8d96660719e85896a

解决可能出现的冲突。如果在 cherry-pick 过程中出现冲突,你需要手动解决这些冲突,然后使用以下命令继续 cherry-pick:

 1git add <conflicted-files>
 2git cherry-pick --continue
 3
 4```shell
 5
 6如果想取消:
 7
 8```shell
 9git cherry-pick --abort
10
11```shell
12
13上传改动:
14
15```shell
16git push --set-upstream origin cherry-pick/10629