更正了历史上很久以前发生的文件夹删除和添加重命名 [英] Correct deleted and added folder to a rename which occurred far back in history

查看:11
本文介绍了更正了历史上很久以前发生的文件夹删除和添加重命名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将一个文件夹projectname/stuff/*.py移到了projectname/projectname/stuff/*.py,其中projectname/.git/是存储库的基本文件夹。原来的文件夹重命名显然登记为文件夹的删除,随后添加的新创建的文件与原始删除的文件几乎(但不完全相同)。我当时没有注意到这个问题,现在已经过了几个月,提交了数百次。

我不能再与拆分前存在的其他分支的更改合并或区别,因为。有没有一种简单的方法可以修复这个问题,这样我就可以合并来自其他分支的更改,而无需遍历和修改我历史记录中的每个提交?

推荐答案

不显式存储移动(扩展为重命名)。相反,它总是记录一个文件的删除和另一个文件的添加。它通过计算已删除和添加的文件的相似度来检测移动和重命名。因此,部分好消息是,你不必重写你的历史来实现这一点。

相反,您需要告诉diff或merge来查找重命名的文件。在diff中,您将使用--find-renamesflag,在合并中,您将使用recursive策略和find-renamesoptions集合。

git diff --find-renames[=<n>] 
git merge -s recursive -Xfind-renames[=<n>] 
两者都可以接受一个可选的值来表示文件需要有多相似。默认情况下,这是50%。您可以通过将<n>设置为您要查找的相似性来设置此设置。例如,如果文件中至少有40%的行相同,则--find-renames=40%表示匹配。注意不要调得太高,很容易出现误报。

此选项通常在默认情况下处于打开状态。它已经打开,这个问题的另一个常见原因是您正在使用的文件中的大量空白更改(行尾更改、制表符到空格、缩进更改)将其推高到50%的阈值。在这些情况下,您可以调用一个空白控制选项(对于diffmerge)来提供帮助,但这通常需要在事后进行一些清理,因此您可能需要为此类合并添加--no-commit选项,以便您可以在提交之前清理任何空白问题。

这篇关于更正了历史上很久以前发生的文件夹删除和添加重命名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆