git : 为 git merge --squash -X theirs 禁用自动合并
git : disable auto-merge for a git merge --squash -X theirs
我的项目需要以下工作流程:
2个分支:dev和master(我把这个问题简单化了,但我实际上也使用了features和release分支)
我在 dev 分支上提交技术更改。
当我想发布一个新的大版本时,我将 dev 合并到 master 但不保留开发历史。
我不希望 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 theirs 采用“他们的”(开发)版本,但仅在 无法自动合并时。问题来自自动合并(我看到所有有问题的文件都已自动合并)。
我怎样才能禁用自动合并,以便 master 分支中的所有文件都被 dev 的内容替换?
我想我找到了答案。 git merge 是指将一个文件版本的更改合并到另一个版本中。这不是替换工具。
-X theirs
只是通过选择他们的版本来自动解决冲突,但是 在某些非常特定的行 (不是整个文件) git 没有知道要做什么。这绝对不是像我想的那样用“他们的”版本替换文件的全部内容。
为了用“他们的”(开发)版本替换文件的内容,我做了:
git merge dev --squash
Git 表示没有解决冲突。现在 将 替换为所有文件的版本,我做了 :
git checkout --theirs *
最后将所有冲突标记为已解决:
git add -u
提交并推送,一切都很好:)
我的项目需要以下工作流程:
2个分支:dev和master(我把这个问题简单化了,但我实际上也使用了features和release分支)
我在 dev 分支上提交技术更改。
当我想发布一个新的大版本时,我将 dev 合并到 master 但不保留开发历史。 我不希望 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 theirs 采用“他们的”(开发)版本,但仅在 无法自动合并时。问题来自自动合并(我看到所有有问题的文件都已自动合并)。
我怎样才能禁用自动合并,以便 master 分支中的所有文件都被 dev 的内容替换?
我想我找到了答案。 git merge 是指将一个文件版本的更改合并到另一个版本中。这不是替换工具。
-X theirs
只是通过选择他们的版本来自动解决冲突,但是 在某些非常特定的行 (不是整个文件) git 没有知道要做什么。这绝对不是像我想的那样用“他们的”版本替换文件的全部内容。
为了用“他们的”(开发)版本替换文件的内容,我做了:
git merge dev --squash
Git 表示没有解决冲突。现在 将 替换为所有文件的版本,我做了 :
git checkout --theirs *
最后将所有冲突标记为已解决:
git add -u
提交并推送,一切都很好:)