git 与特定提交合并

git merge with specific commits

最近我将我们的代码库从 perforce 迁移到了 github。我使用 git-p4 工具来设置 git 回购和分支映射以及提交历史(p4 提交历史)。我面临合并两个分支的问题,QA 和开发,都有 x 和 y 次提交,并且 x < y。很久以前,开发就从 QA 中分离出来,并且从未合并过(根据我们团队遵循的 perforce 工作流程)。

现在为了设置 git 工作流程,我必须将开发合并到 QA 中(用于 QA 提升),但是,此合并的结果将是在 QA 上重放开发的所有提交。我不希望这种情况发生,因为这会用不需要的开发历史污染 QA。我只想合并开发中的较新提交。

我尝试了以下方法。

git merge --squash development (this did not work) 

git checkout -b qa_cycle_1.0 
git cherry-pick commit1 commit2 . . .
open pull request with qa_cycle_1.0 and QA

第二种方法可行,但这包括了挑选樱桃的开销,并且在将修补程序从 QA 合并到开发时,事情很容易变得复杂。

有没有办法在不继承开发历史的情况下合并这两个分支?我需要想出一个我们团队应该遵循的约定。

如果您有 dev 的前 n 次提交,您不想 想要合并到 QA(即,您只想要最新的 m 次 dev 提交),您可以:

  • 合并第 n 个提交,但与 git merge --ours <sha1 of last n commit> 合并:这不会改变 QA 中的任何内容,但将 n 个提交的最后一个记录为 "merged"。
  • 合并开发分支:git merge dev:自上次合并以来的所有提交都将被合并。