[英]Git rebase to remote branch with history preserved
我们有这个问题 ,可以通过提高merge
的工作流程,所以我们使用的是考虑rebase
工作流程来代替。
一个问题是, rebase
在历史的改写远程储存的结果。 但是我认为可以通过以下方式解决
branch_rebaseXXXXXXXX
的分支上标记一个tag
(可以命名为branch_rebaseXXXXXXXX
,其中XXXXXXXX
是时间戳) tag
rebase
Git的可以防止你在做rebase
上遥控器,即使你按照上面的保存历史。 代替git push --force
hack,我们可以做
branch_new
之上branch
branch
branch_new
重命名为branch
当应用此方法并仅使用rebase
,虽然生成的提交历史记录不是线性的,但是从一开始就不严格merge
,但是由于将不存在合并,因此它将有效地形成树状图,其中每个叶节点都是活动分支,或用标签标记。 就个人而言,我将这些标签称为“墓碑”。
由于上述方法尚未在实践中使用,因此该方法的优缺点是什么? 尤其是,如果有人签出分支机构进行工作,然后另一个人在该分支机构上标记了墓碑,将会发生什么?
我最近遇到了这样的情况,有人用糟糕的push --force
放弃了整个历史,所以我不热衷于您的解决方法。
好的, 无论出于何种原因,您都希望自己的官方历史是线性的。 但是您仍然希望某些工作分支具有完全可见性。
您想要一个pu
分支。
“待更新”分支会不断重新建立基础,将远程分支的配置置于强制使用状态。 在服务器上,如果不是快速推送,您可以选择添加脚本来创建引用(可能是标签,也可能既不是标签,也不是分支)。 每个用户(或组)都需要自己的pu
分支。
master分支仅使用快进进行更新,并且仅使用纯提交而不进行合并。
某个人(待定)在收到请求时接受提交,并将它们(樱桃挑?)添加到master分支中。 这个人不做合并,合并(实际上是固定变基)发生在这里的pu
分支上。
有人也可以做其他事情... 测试 。 如果测试成功,他们会将补丁添加到自己的“测试”分支中,从而使主机快速转发。 如果测试失败,则将测试分支一分为二,并在重新测试之前将错误的补丁(或多个补丁)返回给发件人。
关于自动创建的引用,git可以很好地处理大量引用,但是(在我看来)这些过期时间很短。 仅打开服务器上的刷新日志就足够了。 OTOH如果您想让它们永远merge -s ours
可以将其merge -s ours
到work-history
分支中,这将使log --graph
令人印象深刻,而无需其他参考。
您可能会觉得您只想摆脱服务器脚本,而让用户对master进行基准调整。 我的问题是,您需要一个固定的点,用某种方式说“这已经成为官方历史,您不能更改它”。 没有它,您的开发人员可能最终会更改那些已经离开您的控制权(变成生产或客户)的提交。 推向高手就是那个标记。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.