如何在git中将2个拉取请求从一个分支合并到另一个分支

时间:2020-11-05 18:39:13

标签: git git-merge git-cherry-pick

我有2个分支,例如master和feature。

这是master分支的实际git日志,我需要将2个请求(#174和#173)合并到我的功能分支中。

commit e6a35ad0b2363932ac190ec602a7fd0c8bf9f04f (HEAD -> master, origin/master, origin/HEAD)
Merge: a922cb0 f45db00
Author: xyz
Date:   Wed Sep 2 17:55:32 2020 -0700

    Merge pull request #174 from xyz/v4upgrade
    
    readjust null values for string data type from v4

commit f45db00e1e4b1cce05eb1035b6bd3d3eab97f3bc
Author: xyz
Date:   Wed Sep 2 17:32:07 2020 -0700

    readjust null values for string data type from v4

commit a922cb0a5eb4bf2b7734af8041fb9cffcd2cee5f
Merge: 5f00c71 c9ab5c3
Author: xyz
Date:   Tue Sep 1 23:42:48 2020 -0700

    Merge pull request #173 from xyz/v4upgrade
    
    Implementation for UI fields for user info API

我想将pull request #173pull request #174合并到feature分支。

我尝试了摘樱桃的提交,但收到如下错误:

git checkout feature
git cherry-pick e6a35ad0b2363932ac190ec602a7fd0c8bf9f04f
error: commit e6a35ad0b2363932ac190ec602a7fd0c8bf9f04f is a merge but no -m option was given.
fatal: cherry-pick failed

git cherry-pick a922cb0a5eb4bf2b7734af8041fb9cffcd2cee5f
error: commit a922cb0a5eb4bf2b7734af8041fb9cffcd2cee5f is a merge but no -m option was given.
fatal: cherry-pick failed

1 个答案:

答案 0 :(得分:1)

如果您要将来自2个PR的更改合并到另一个分支中,则将与PR相关的修订(独立地)从master挑选到开发。

说...。类似这样:

git checkout -b temp dev # will work on temp to cherry-pick revisions
# cherry-pick changes related to commit_id_3
git cherry-pick $( git merge-base commit_id_3~ commit_id_3^2 )..commit_id_3^2
git checkout dev
git merge --no-ff -m "Merging changes from commit 3" temp # then we merge into dev

也可以对commit_1做同样的事情。也就是说,假设这些PR是直线,并且它们的历史记录中没有合并。

澄清:通过merge-base可以知道从commit_id_3(或其他任何内容)中合并的PR的修订版本,以便cherry-pick只能携带用于开发任何PR的修订版本。