如何编辑一个包含数百次合并的Git提交,并将冲突合并到过去?
我需要在存储库历史记录的最开始修改提交。自从那次提交以来,可能有数百个分支、合并和合并冲突 我试着使用交互式的rebase和--preserve merges选项,但仍然会出现数百个类似于“conflict(content):在Foobar.cpp中合并冲突”的冲突错误。如果不是不可能的话,手动重新解决这些问题是非常不切实际的如何编辑一个包含数百次合并的Git提交,并将冲突合并到过去?,git,version-control,git-rerere,Git,Version Control,Git Rerere,我需要在存储库历史记录的最开始修改提交。自从那次提交以来,可能有数百个分支、合并和合并冲突 我试着使用交互式的rebase和--preserve merges选项,但仍然会出现数百个类似于“conflict(content):在Foobar.cpp中合并冲突”的冲突错误。如果不是不可能的话,手动重新解决这些问题是非常不切实际的 我听说过“重新播放”功能,但只是刚刚才听说,所以我还没有启用它。这就是我要尝试的。没有保证,但值得一试 启用(git config rere.enabled true)
我听说过“重新播放”功能,但只是刚刚才听说,所以我还没有启用它。这就是我要尝试的。没有保证,但值得一试
git config rere.enabled true
)git config rere.autoupdate true
)雷雷在这里帮不了你 您正在寻找
git过滤器分支
。根据您所做的更改,您可能可以使用比树过滤器更快的索引过滤器。通过这样做,您将更改所有后续SHA-1
确保包含--all
参数,以便更新所有引用。这将破坏任何将此回购协议用作子模块的回购协议,因为SHA-1将引用不存在的回购协议。您需要再编写一些脚本来解决这个问题
此外,如果您的同事有任何未推送的提交,他们将不得不git-rebase--on
将他们出色的工作放到历史上的新位置上
在未来的几年里,我们希望看到更多的人支持这种恶作剧,尤其是当涉及子模块时。似乎与git filter branch
有着相同的目标,更简单的用户体验和更好的性能(请参阅):
请参阅下面的摘录,以从git历史记录中删除密码泄漏
如果要修改文件内容,可以基于文件中的表达式列表(每行一个)进行修改。例如,名为expressions.txt的文件包含
p455w0rd
foo==>bar
glob:*666*==>
regex:\bdriver\b==>pilot
literal:MM/DD/YYYY==>YYYY-MM-DD
regex:([0-9]{2})/([0-9]{2})/([0-9]{4})==>\3-\1-\2
然后跑
git filter repo--替换文本表达式.txt
将通过并用移除的替换p455w0rd[…]
魔法子弹在第三通道有售。买一整箱;它们很便宜!我会先签出提交,编辑并提交,然后将当前提交与之合并。这里不需要魔法子弹。我只是觉得这是很多人都会遇到的问题,也许有人能给我指出正确的方向。伊格纳西奥,我不明白你的意思。你能扩大一下吗?谢谢不知道为什么投票决定关闭。这是一个非常好的问题,显示了对Reere角色的潜在误解。我仍然认为这可以帮助通过谷歌点击的人。使用git,您不能总是让代码示例与问题和答案匹配。在其他技术上,如编程语言、SDK、库等,你是100%正确的。尝试过,但没有成功。在重设基础期间,同样的冲突仍会发生。无论如何谢谢你!非常感谢。通过一些巧妙的脚本,这看起来应该适用于我需要进行的特定更改,因为这些更改都不涉及实际的源代码。(只是修改提交消息、挤压提交和删除二进制文件。)我不确定您是否要挤压提交。但您可以指示筛选器分支删除空提交。如果要删除的文件具有仅影响该文件的提交,则可能会发生这些情况。在此之后,这些将是空提交。因此,您可能希望启用该选项以删除它们。您可能已经知道这一点,但在使用过滤器分支之前,请确保备份您的回购协议。