git 我怎样才能根据提交是在挑选和合并之后创建的,将提交从一个分支引入到另一个分支中呢?

fnatzsnv  于 2022-11-27  发布在  Git
关注(0)|答案(1)|浏览(125)

考虑到我有两个分支:masterstaging。提交C是在staging上进行的,并被紧急挑选到master中,因此它已经存在。

-x-x-x-A-B-C-D (staging)
      /     
-x-x-x-C (master)

后来,另一个分支feature被直接合并到master中,所以两个提交被添加到master,提交E和合并提交F

-x-x-x-A-B-C-D (staging)
      /     
-x-x-x-C-E-F (master)

我需要将master中的内容合并到staging中,这样就可以将staging合并到master中。如果我只使用合并,那么由于挑选的原因,我会得到重复的提交。如果我改为重定基:git checkout staging && git rebase origin/master我得到AB,和D在上面(尽管,我不认为合并提交F进来,除非我使用--rebase-merges,尽管可能是错误的):

-x-x-x-C-E-F-A-B-D (staging)

但是,如果我希望这三个提交根据它们实际创建的时间进行合并,并最终得到:

-x-x-x-A-B-C-D-E-F (staging)

这是可能的吗?这样做有意义吗?还是把ABD放在上面更好?

omqzjyyz

omqzjyyz1#

短语git checkout staging && git rebase origin/masterstaging重定基为master,这似乎与你想要的正好相反。你想要的更像是将E和F从master重定基为staging。请记住,重定基只是挑选,所以你可以通过挑选E然后F来实现这一点。
如果F是一个合并提交,那么你必须指定它的父提交,如下所示:

git switch staging
git cherry-pick <SHA of E>
git cherry-pick -m1 <SHA of F>

但我更倾向于认为没有合并,即使你声称有,所以你所要做的就是说

git switch staging
git cherry-pick <SHA of E>
git cherry-pick <SHA of F>

相关问题