让Git确认以前移动的文件

我已经手动移动了一堆文件,而没有想到,也找不到一种方法让git识别文件刚刚移动,而不是实际上不同的文件。 有没有办法做到这一点,而不是删除旧的,添加新的(从而失去了历史),或重新使用git-mv的所有更改?

我认为它已经这样做了。 现在,我可能是错的,但是我已经根据它们的内容读取了这个git跟踪文件,而不是基于它们在文件系统中的位置或基于差异/差异。 在堆栈中,我认为它显示它就好像文件被删除,然后重新添加,但我想我已经试过这一次,它仍然保持历史,由于上述方式,git跟踪的东西。

如果我是正确的,还是会有帮助的。 对不起,如果我误解了你的问题。

要让git删除已被删除或移动的文件,只需input

 git add -u 

git不会跟踪单个文件的历史logging,也不会专门处理移动和复制,也就是说,没有特殊的元数据指示移动或复制发生。 相反,每个git提交都是工作树的完整快照。

如果你想在git log看到移动,除了列出哪些文件已经改变的选项之外,你可以提供-M ,例如

 git log --summary -M 

git会查看提交历史logging中的相邻树,并推断每个提交所移动的文件是否在其中。

要find副本以及重命名,您可以使用-C选项,您可以提供两次,以使git看起来更难以获得可能的复制源,但会牺牲一些性能。

 git log --summary -M -C -C 

注意,因为git不存储文件历史logging(只有提交历史logging),即使你做了git rmgit mv文件,也不会丢失任何历史logging。 对path的所有更改仍将logging在git log

为了更好地理解为什么Git会做重命名检测而不是更常见的显式重命名跟踪,以及git log path限制如何工作,您可以阅读由Junio C Hamano,Git的维护人员(以及其中的引用)阅读Linus的最终内容跟踪工具博客文章)。