我创建了一个远程仓库的本地副本。由于一些旧的错误提交数据导致麻烦,我不得不重写(过滤分支)本地回购历史记录。所以现在我有一个远程回购的克隆,除了提交哈希都是不同的。没有历史的Git pull
有没有办法让本地回购协议仍然可以与远程协同工作,以便从中提取未来的提交?它永远不会推动,这不是一个问题。如果我运行git pull,它会尝试将其全部原始历史记录拉出来,这是不需要的,并且会重新破坏本地回购。
我创建了一个远程仓库的本地副本。由于一些旧的错误提交数据导致麻烦,我不得不重写(过滤分支)本地回购历史记录。所以现在我有一个远程回购的克隆,除了提交哈希都是不同的。没有历史的Git pull
有没有办法让本地回购协议仍然可以与远程协同工作,以便从中提取未来的提交?它永远不会推动,这不是一个问题。如果我运行git pull,它会尝试将其全部原始历史记录拉出来,这是不需要的,并且会重新破坏本地回购。
如果你关心的只是拉动,那么是的。你可以做的是获取远程仓库。然后确定远程回购中与您最新的本地提交相匹配的提交。然后将该远程提交合并到本地,并使用-s ours
标志(设置ours
策略)。这将产生一个将两个历史记录连接在一起的合并提交,同时只使用本地历史记录中的树(因此没有合并冲突)。
通过此合并,您现在可以安全地从远程存储库中获取git pull
,并且它只会尝试合并提交中比您刚创建的虚拟合并更新的提交。
请注意,您仍然必须保留远程回购的整个历史记录,并且可以将其作为您的虚拟合并的第二个父级访问。但它不会影响你的本地树。
因此,这是错误的提交数据,并且您仍然希望从上游接收更新,但是您*不希望推送“良好”提交数据?你能解释一下你的情况吗?是什么让历史如此糟糕以至于如果你从不推动,你需要重写它? –
我不控制远程回购,它是一个公共项目。维护它的人不希望由于某种原因修复不良历史。当我想将项目推送到新的远程设备时,这些无效的名称/电子邮件会导致一些旧的提交出现问题。 – Ryan
对过时的名称/电子邮件的适当回应是使用邮件地图文件,而不是伪造历史记录。如果你能提供帮助,历史应该永远不会被重写。 –