我们使用长寿命分支prod、test和dev。
下一个应用程序版本是在dev中开发的,准备好测试时合并到test中,发布后合并到prod中。
有些提交是直接在测试分支(用于正在测试的版本的错误更正)和prod(用于维护错误)中进行的。
prod和test中的这些提交总是“合并”到子分支中(即:prod合并到test和dev中;test合并到dev中)。
偶尔,在prod中提交错误更正,然后在test和dev中合并,然后推送到origin。但是,计划中有一些变化,错误修正应该是测试版本的一部分,而不是prod版本的一部分。
现在的问题是:如果我在prod中还原提交,那么在prod被合并时,还原也将在test和dev中完成。如何继续删除prod中的更改,并在prod合并后将其保留在test和dev中?
我现在做的是,从测试:

git merge PROD --no-commit

这允许我在测试中提交合并之前放弃prod中还原的更改。然后在没有特殊干预的情况下从test合并到dev。
如果要从prod合并的唯一提交是已还原的提交,则这将导致合并而不包含任何文件…但这似乎仍然有效。
所以我想知道我的方法是正确的还是有更好的方法?

最佳答案

一般来说,将生产分支合并回测试分支是一个坏主意。它通常应该git checkout PROD后跟git merge TEST。(如果你想更多地了解这个经验法则,这个blog post on merging and branches给出了充分的理由。)
如果有人意外地在PROD中提交了一个本应在TEST上的修复程序,您可能应该选中该修复程序并将其还原到TEST。为了一步一步地描述这个过程,让我们假设在PROD上安装了fix的commit具有对象名PROD。然后:

 # cherry-pick the commit onto `TEST`.
 git checkout TEST
 git cherry-pick A

 # Now revert the commit on `PROD`:
 git checkout PROD
 git revert A

现在,当您将A合并到TEST时,应该将修复程序合并到中。(取决于历史,它可能会产生冲突,但如果是这样的话,这应该很容易解决,有利于PROD上的版本)

08-26 20:55
查看更多