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

10

我有一个 SCSS 文件,很丑陋。我想将其拆分为多个文件,以便更容易处理。

如果我的文件是这样的,

file.scss

我希望最终的结论是这样的:

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

smmdlg将会保留files.scss中的大部分内容,因此我希望在未来的开发和开发人员方便性方面能够保留/复制它们的历史记录。

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

2个回答

7

Git内置了基于文件相似性的重命名/复制检测功能。为了确保它可以起作用,首先将file.scss普通复制到所有file-{sm,md,lg}.scss文件中,并提交这些文件。然后从这些文件中删除不需要的部分、删除file.scss,再次提交。现在,例如git log --follow --find-copies file-sm.scss应该显示包括file.scss在内的file-sm.scss的历史记录。


4

为了让 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 保留历史记录,未来的开发者会感谢你进行重构。


2
当引入原始文件的副本时,触及原始文件有什么好处?(其他答案省略了这一步。) - WilliamKF

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接