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

How to merge 2 pull requests from one branch to another in git

我有 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 分支。

我尝试了 cherry picking commits 但得到如下错误:

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

如果您想将来自 2 个 PR 的更改合并到另一个分支,那么 cherry-pick 与 PR 相关的修订(独立地)从 master 到 develop。

说……像这样:

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 是 straight 并且在它们的历史中没有合并。

澄清:merge-base 允许知道合并到 commit_id_3(或其他)中的 PR 是从哪个修订版开始的,因此 cherry-pick 只能进行开发修订任何 PR.