复制文件并且保持文件Git变更历史

直接复制并提交

几个月前在V站看到一个帖子。OP想要把文件复制出来一份,并且保留文件早前的变更历史。之前我还不理解为什么OP要这样做,直到最近我在改造一个公共 utils 文件时也突然冒出来了这个想法。所以也是想尝试一下看看。

简单的实现

按照帖子中的一些链接 🔗 How to duplicate a file while preserving git line history ,很快就能够实现保持提交历史的需求。
简单来说就是先 rename 然后提交 commit,最后使用 git restore 来恢复文件再次提交 commit 就可以让两个文件都保持历史记录了。但是会有两个让人不愉快的 restorerename 提交记录。

让人不愉快的Commit

所以就想着是不是可以继续改进一下。又去翻了一下原帖子。发现 OP 补充了更简单的处理方式。就是复制文件,然后不做修改直接提交。

直接复制并提交

就很简单的保持了原本文件的变更历史。也不需要使用 git log --follow 来使本地的 Git 进行文件分析去完善追踪。
直接可以在 GitLab 或者 Github 上看到对应的 History。


但是,文件的 Blame 中显示的信息会是拷贝的那一次操作,而不会是 History 中的具体修改操作信息。
这是因为新文件是在复制时创建的,所以新文件每一行的“最后修改”信息都是来源自复制操作的提交。


相关资源