[英]Overwrite branch with changes from another branch
各位git用户您好!
我遇到以下问题,我不知道避免它的最佳和正确方法是什么。 所以在这里我将解释:
我正在与 2 个不同的分支机构合作:
master
--> 生产
dev
--> 开发
我目前使用的工作流程如下:
dev
分支上进行更改master
并合并dev
以包含新的更改到目前为止没有什么疯狂的,对吧?
现在,几周前出现了以下场景:
在dev
分支上进行更改
更改经过测试和批准
Checkout master
并合并dev
以包含新的更改
有人意识到这些更改的一部分不应该在master
(生产)中
在master
分支中,我们评论了这些更改,以便在master
中不启用这些更改
现在的情况:
所有更改都在dev
中
所有更改都在master
中,但其中一部分已禁用
到目前为止,一切都很好
几天后,发生了以下事情:
向dev
添加了一些更改
更改已经过测试和批准
检查master
并合并dev
以包括最近的新更改以及现在在master
中注释的更改的一部分。
结果,所有内容都包含在master
中,但已评论的更改仍在master
中评论。
一开始,我有点期待master
被dev
版本覆盖,但后来我意识到这没有多大意义,因为合并实际上是将两个分支的更改放在一起,所以结果是绝对有意义的。 但是,这不是我需要的。
最好的解决方案是什么? 我在考虑以下选项:
绝对禁止在master
分支中进行更改。 所以任何更改(比如注释部分代码)都应该首先在dev
中完成,然后 go 到master
。
合并到master
时使用参数表示忽略当前分支中的所有更改,只获取来自dev
分支的所有内容。 那太棒了,显然我不知道如何在 git 中做到这一点。
无论如何,您的意见将不胜感激。
谢谢!
在对master
进行更改后,您应该立即将master
合并到dev
(一种修补程序,这很好)。
然后在dev
上你应该恢复提交( git revert commit-id
),它在master
中注释掉了东西。
然后当你继续将dev
再次合并到master
时,一切都会好起来的。
[最佳方法] 尝试上述步骤; 如果在dev
中所做的更改不够深入和/或没有触及与commit相同的地方,那么一切都会是正确的; 要么
在master
分支 go 上还原( git revert
)提交。
请在 GitFlow 上阅读Vincent Driessen 的原始博客。
这里缺少的是你直接提交给master
。 永远不要那样做::)
您有几个选项,具体取决于您的具体情况,但如果您遵循 GitFlow,答案如下:
release_xxx
分支,它本质上是新版本的发布候选者。release
,然后将该更改也合并到dev
。release
完全测试后,将其合并到 master 中,结束它。 如果您通常不需要延长发布分支的时间,则可以创建一个hotfix
分支,该分支在测试后将合并到master
和dev
。 Hotfix 分支通常用于解决已经发布到生产环境中的生产问题——它就像一个合并到dev
的功能分支,除了打算直接合并回master
(除了dev
之外,所以所有开发分支也会得到更改)。
这使您可以继续在dev
中进行其他并行开发,而不必将dev
中的新内容推送到master
,只留下修复所需的更改发生在release
或hotfix
分支中,并且您可以单独将其推送回dev
以确保它与任何并行工作相结合。
图片来源:文森特·德里森
您应该将master
反向合并到dev
,解决所有差异(即添加或删除评论等),然后合并回master
。 如果你只是想清理,你可以这样做并直接推送到 master,但最好有一个 PR 和dev
中同行的审查,以提供可追溯性并清楚地显示 git 历史中做了什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.