繁体   English   中英

Git重新建立到保留了历史记录的远程分支

[英]Git rebase to remote branch with history preserved

我们有这个问题 ,可以通过提高merge的工作流程,所以我们使用的是考虑rebase工作流程来代替。

一个问题是, rebase在历史的改写远程储存的结果。 但是我认为可以通过以下方式解决

  1. 在您要重新设置branch_rebaseXXXXXXXX的分支上标记一个tag (可以命名为branch_rebaseXXXXXXXX ,其中XXXXXXXX是时间戳)
  2. tag
  3. 应用rebase

Git的可以防止你在做rebase上遥控器,即使你按照上面的保存历史。 代替git push --force hack,我们可以做

  1. 创建一个新的分支branch_new之上branch
  2. 如上标记标签
  3. 重新设置新分支
  4. 推送新分支和标签
  5. 删除旧的本地和远程branch
  6. branch_new重命名为branch
  7. 推送更改分支名称

当应用此方法并仅使用rebase ,虽然生成的提交历史记录不是线性的,但是从一开始就不严格merge ,但是由于将不存在合并,因此它将有效地形成树状图,其中每个叶节点都是活动分支,或用标签标记。 就个人而言,我将这些标签称为“墓碑”。

由于上述方法尚未在实践中使用,因此该方法的优缺点是什么? 尤其是,如果有人签出分支机构进行工作,然后另一个人在该分支机构上标记了墓碑,将会发生什么?

我最近遇到了这样的情况,有人用糟糕的push --force放弃了整个历史,所以我不热衷于您的解决方法。

好的, 无论出于何种原因,您都希望自己的官方历史是线性的。 但是您仍然希望某些工作分支具有完全可见性。

您想要一个pu分支。

“待更新”分支会不断重新建立基础,将远程分支的配置置于强制使用状态。 在服务器上,如果不是快速推送,您可以选择添加脚本来创建引用(可能是标签,也可能既不是标签,也不是分支)。 每个用户(或组)都需要自己的pu分支。

master分支仅使用快进进行更新,并且仅使用纯提交而不进行合并。

个人(待定)在收到请求时接受提交,并将它们(樱桃挑?)添加到master分支中。 这个人不做合并,合并(实际上是固定变基)发生在这里的pu分支上。

有人也可以做其他事情... 测试 如果测试成功,他们会将补丁添加到自己的“测试”分支中,从而使主机快速转发。 如果测试失败,则将测试分支一分为二,并在重新测试之前将错误的补丁(或多个补丁)返回给发件人。

关于自动创建的引用,git可以很好地处理大量引用,但是(在我看来)这些过期时间很短。 仅打开服务器上的刷新日志就足够了。 OTOH如果您想让它们永远merge -s ours可以将其merge -s ourswork-history分支中,这将使log --graph令人印象深刻,而无需其他参考。

您可能会觉得您只想摆脱服务器脚本,而让用户对master进行基准调整。 我的问题是,您需要一个固定的点,用某种方式说“这已经成为官方历史,您不能更改它”。 没有它,您的开发人员可能最终会更改那些已经离开您的控制权(变成生产或客户)的提交。 推向高手就是那个标记。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM