如何在重构为多个文件时保留git历史记录

时间:2016-08-02 20:01:23

标签: git

我有一个丑陋的SCSS文件。我想将其拆分为多个其他文件,以便更轻松地使用。

如果我的文件是,

file.scss

我想完成类似的事情,

file.scss
file-sm.scss
file-md.scss
file-lg.scss

smmdlg都将包含原始files.scss的重要部分,因此我希望保留/复制其中的历史记录,以便将来更轻松开发和未来的开发人员。

如何将文件重构为多个新文件,并将历史记录保存或复制到新文件中?

2 个答案:

答案 0 :(得分:3)

Git基于文件相似性内置重命名/复制检测。为确保启动,请首先对file.scss的所有file-{sm,md,lg}.scss执行file.scss的纯文本复制并提交这些文件。然后从这些文件中删除不需要的部分,删除git log --follow --find-copies file-sm.scss,然后再次提交。现在例如file-sm.scss应显示file.scss的历史记录,包括nodejs的历史记录。

答案 1 :(得分:1)

您需要进行一次涉及旧文件和新文件的提交,以便git将来与它们关联。

复制原始文件,但暂时不更改新文件:

cp file.scss file-sm.scss
cp file.scss file-md.scss
cp file.scss file-lg.scss

对原始文件进行一次临时更改,使其与新版本一起提交:

echo "// refactoring: split the file" >> file.scss

提交更改:

git add .
git commit -m "Refactor: splitting up file.scss"

现在,使用--follow-C1标志时,您可以查看旧文件的历史记录:

git log --follow file-lg.scss
git blame -C1 file-lg.scss

清理“ //重构..”注释并继续进行重构。

+1 用于在重构时保留历史记录-未来的开发人员将感谢您。