我对Git相对较新,之前使用过Subversion (SVN)。
我注意到大多数图形化的Git前端和IDE插件似乎无法显示文件历史记录,如果文件已被重命名。当我使用
git log --follow
在命令行中,我可以看到重命名后整个日志。
根据Linus Torvalds(替代链接)的说法,--follow
开关是“SVN新手”的喜好;真正的Git用户不使用它:
--follow是一个完全的hack,只是为了满足从未了解过像父母或漂亮的修订图表等内容的ex-SVN用户。
它并不是非常基本的东西,但是“--follow”的当前实现确实是一个快速的预处理事情,它被添加到了修订步行逻辑上,而不是任何真正的必要部分。
它的设计初衷就是为了取悦“SVN新手”,而不是作为“真正的git功能”存在。想法是让你摆脱认为重命名在大局中很重要的(破碎的)思维方式。
那么,硬核Git用户如何获取文件的历史记录,当它被重命名时?这样做的“真正”方法是什么?
git mv oldfile newfile
并没有将重命名操作完全记录下来 - 它只是相当于删除一个文件,再添加一个新文件。 Git只会在之后的每个提交中从树的状态中计算出重命名和复制操作。请注意,这里不会记录重命名操作本身。 - Mark Longair/bin/mv oldfile newfile
)重命名文件,然后执行git add newfile; git rm oldfile
,则结果与git mv oldfile newfile
的结果无法区分。请注意,这里的翻译保持了原文的意思和用词,并使其更加易懂。 - Mark Longairgit log --follow
在 git 2.9(2016年6月)有所改进:请参见我的回答。 - VonCdiff
时,您可能想尝试使用--color-moved
进行实验。 - Michael