问题描述
我希望我的项目具有以下工作流程:
-
2个分支:dev和master(我简化了这个问题,但实际上我也使用功能和发布分支)
-
我在dev分支上进行技术更改。
-
当我要发布新的大版本时,我将dev合并到master中,但没有保留dev历史。 我不希望master分支有任何技术性消息,例如“ blablabla中的已修复错误”。我只希望我的master分支向我展示这样的重要发行版本:
Initial commit ----- [PROD V1] ------ [PROD V2] ------
对于这种行为,我使用
git merge dev --squash -X theirs
在master分支上检索在master的工作目录中的dev分支中所做的所有更改,然后使用[PROD]
消息创建一个提交并推送。
问题是,当我在master分支上尝试过merge dev --squash -X theirs
后,我注意到一些文件被严重地自动合并(某些完整的代码块被添加了两次..),这最终导致了许多错误。我的PHP脚本。
据我了解,-X他们的版本是“他们的”(开发版),但是只有 ,在无法自动合并的情况下 。问题来自自动合并(我发现所有存在该问题的文件都已自动合并)。
如何禁用自动合并功能,以便将master分支中的所有文件全部替换为dev的内容?
解决方法
我想我找到了答案。 git merge旨在将文件版本中的更改合并到另一个版本中。这不是替代工具。
-X theirs
只是通过选择版本来自动解决冲突,但是在某些非常特殊的行(不是整个文件)中,git不知道该怎么做。正如我想的那样,这绝对不是要用“其”版本替换文件的全部内容。
要将文件的内容替换为“其”(dev)版本,我做了:
git merge dev --squash
Git说没有解决的冲突。现在用所有文件的版本替换,我做了:
git checkout --theirs *
最后将所有冲突标记为已解决:
git add -u
提交并推送,一切都很好:)