我们使用长期分支PROD、TEST和DEV。
下一个应用程序版本在DEV中开发,一旦准备好进行测试,就会合并到TEST中,发布后再合并到PROD中。
一些提交直接在TEST分支中进行(用于修复正在测试的版本的错误),在PROD中进行(用于维护错误)。
这些PROD和TEST中的提交总是“向下合并”到子分支中(即:PROD合并到TEST和DEV;TEST合并到DEV)。
偶尔会在PROD中提交一个错误更正,然后将其合并到TEST和DEV,然后推送到源。但是,如果规划发生变化,错误更正应该成为测试版本的一部分,而不是PROD版本的一部分。
现在问题来了:如果我撤销PROD中的提交,当PROD向下合并时,TEST和DEV中的撤销也会被执行。如何处理以删除PROD中的更改,并保持它在TEST和DEV中,即使在PROD向下合并后也是如此?
我目前的做法是从TEST开始:
下一个应用程序版本在DEV中开发,一旦准备好进行测试,就会合并到TEST中,发布后再合并到PROD中。
一些提交直接在TEST分支中进行(用于修复正在测试的版本的错误),在PROD中进行(用于维护错误)。
这些PROD和TEST中的提交总是“向下合并”到子分支中(即:PROD合并到TEST和DEV;TEST合并到DEV)。
偶尔会在PROD中提交一个错误更正,然后将其合并到TEST和DEV,然后推送到源。但是,如果规划发生变化,错误更正应该成为测试版本的一部分,而不是PROD版本的一部分。
现在问题来了:如果我撤销PROD中的提交,当PROD向下合并时,TEST和DEV中的撤销也会被执行。如何处理以删除PROD中的更改,并保持它在TEST和DEV中,即使在PROD向下合并后也是如此?
我目前的做法是从TEST开始:
git merge PROD --no-commit
这使我能够在将合并提交到测试环境之前,从生产环境中丢弃已还原的更改。然后,在不需要特殊干预的情况下,将测试环境中的更改合并到开发环境中。
如果要合并的唯一提交是被还原的提交,则会导致合并时没有文件...但尽管如此,这似乎仍然有效。
因此,我想知道我的方法是否正确,或者是否有更好的方法?
git cherry-pick
是从一个分支中挑选单个bug修复提交到另一个分支的标准方法,其中您不一定希望在该分支中包含所有其他提交。(例如,请参见此问题。)如果您愿意将PROD
合并到TEST
中,并且您解释这些分支的目的的方式符合该帖子指南的上下文,那么没问题-我只是描述了我通常认为是良好实践的内容。 :) - Mark Longair