如何在git中合并挑选的提交?

3
我有两个主要的分支masterdevelopment。最近,我不得不推送一个热修复,这些提交已经合并到development中,为此,我从development中挑选了提交,创建了一个新的热修复分支,添加了另一个修复提交,并将其合并到master中。我的问题是,如何将新的提交合并到development中,而不会弄乱git提交历史记录?
大致上,我做了以下操作:
git cherry-pick <commit SHA>
git checkout -b hotfix-branch
[make more changes]
git commit -m "Fix issue"
git checkout master
git merge hotfix-branch

现在,如果我查看masterdevelopment之间的git diff,旧的development提交会显示出来,因为它们是cherrypicked,因此是具有相同更改的不同提交。最好的方法是将其合并回development并“修复”这些差异是什么?
编辑添加:或者,在像这样的情况下,我应该做什么,其中一个热修复包括development分支中的提交?

1
你所说的是关于 git flow 的通用工作原理。现在将主分支合并回开发分支没有问题。Git 应该会检测到两者存在相同的更改,并为您解决问题。 - scrowler
@RobbieAverill 我们正在尝试使用git flow,但在这种情况下,热修复所需的提交已经在开发中了,因此通过cherrypicking,这些提交显示为重复(不同的提交)。如果我在开发中执行git merge master,则新的合并提交将显示在主分支的diff上,即使这些更改已经在主分支上。我的意思清楚吗? - dee
@RobbieAverill 这些提交显示为差异是否实际上可以接受?Git会在未来处理它吗?我担心的是developmentmaster分支之间出现分歧的历史记录。 - dee
我喜欢这个问题。我个人认为没有问题,但是如果有比我更了解的人给你一个答案,我也很感兴趣,因为这对我也很相关。 - scrowler
1个回答

1
你需要在历史记录树中“向下”挑选修复内容,以便稍后可以将其“向上”干净地合并到其他分支。
  1. 检出合并基础(通常情况下,有时是树的深层)。
  2. Cherry-pick A,生成新的提交记录X
  3. X合并回两个分支中。
此后,两个分支都将拥有共同的X,这意味着它们都包含该修复程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接