我在没有考虑的情况下手动移动了一堆文件,并且找不到让git认识到文件只是被移动而不是实际上不同的文件的方法.有没有办法做到这一点,除了删除旧的和添加新的(从而丢失历史),或使用git-mv重做所有更改?
Hug*_*ugo 68
要让git删除已经删除或移动的文件,只需输入即可
git add -u
Run Code Online (Sandbox Code Playgroud)
Jor*_*eña 22
我认为它已经这样做了.现在,我可能是错的,但我读过git根据文件系统中的位置或基于delta /差异来跟踪文件的内容.在堆栈中我认为它显示它好像文件被删除然后重新添加,但我想我已经尝试了一次它仍然保持历史,由于上述git跟踪事物的方式.
如果有人确认我是否正确,仍然会有所帮助.对不起,如果我误解了你的问题.
CB *_*ley 11
git不会跟踪单个文件的历史记录,也不会特别处理移动和副本,也就是说没有特殊的元数据表明发生了移动或复制.相反,每个git commit都是工作树的完整快照.
除了列出哪些文件已更改的选项之外,如果您想要查看git log可以提供的移动-M,例如
git log --summary -M
Run Code Online (Sandbox Code Playgroud)
git 将查看提交历史记录中的相邻树,并推断每个提交移动的文件是否存在.
要查找副本以及重命名,您可以使用该-C选项,您可以提供两次以使git看起来更难以查找可能的复制源,但会牺牲一些性能.
git log --summary -M -C -C
Run Code Online (Sandbox Code Playgroud)
请注意,因为Git不会存储文件历史记录(仅提交历史),即使你没有git rm和git mv文件,你就不会丢失任何历史.对路径的所有更改仍将被记录并在a中可见git log.
为了更好地理解为什么Git确实重命名检测而不是(更常见的)显式重命名跟踪,以及git log 路径限制如何工作,你可以阅读由Git的维护者Junio C Hamano 阅读Linus的终极内容跟踪工具博客文章(以及其中的参考文献).