我有一个坐在git中的示例HTML文件。最近它需要完全改变,因此没有太多关注新旧之间的差异。
目前差异将显示为++ - + - + - + --- ++,我希望它只显示-------- ++++++。
有没有办法告诉git这个文件更改是一个完整的更改,用户不需要知道行差异,而是整体改变?
P.S。答案显示了diff命令的方式,但是如果我可以在commit命令中为特定文件永久指定它,那将会很棒。
答案 0 :(得分:3)
git中的每次提交都会为文件存储一个全新的blob,即使更改是文本文件中的单个字符更改(稍后可能只包含delta等)
你通常不应该担心git存储的方式和内容(以及磁盘空间便宜)
更新
如果您只是担心在重写文件时看到的差异,可以在diff中使用-B选项:
-B [
<n>][/<m>
]
--break-重写[=[<n>][/<m>]]
将完全重写更改分为删除和创建对。这个 有两个目的:
它会影响相当于文件总重写的更改方式 不像一系列的删除和插入混合在一起非常 几条线恰好在文本上与上下文匹配,但作为一个 单个删除所有旧的,然后单个插入 一切都是新的,数字m控制-B选项的这个方面 (默认为60%)。 -B / 70%指定不到原始的30% 应该保留在git的结果中,将其视为完全重写 (即,否则产生的补丁将是一系列删除和 插入与上下文行混合在一起)。
与-M一起使用时,完全重写的文件也被视为 重命名的来源(通常-M只考虑一个消失的文件 作为重命名的来源),数字n控制着这一方面 -B选项(默认为50%)。 -B20%指定更改 添加和删除相比文件大小的20%或更多 有资格被选为重命名的可能来源 另一个文件。
有更复杂的方法,比如使用filter-branch等来删除(和修改)历史记录,但在这种情况下我不会推荐这些。