我们使用长寿命分支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
上的版本)