我尝试通过gitlog显示文件的完整历史记录,但问题是该文件的父文件夹在历史记录中被重命名了,而我想查看完整的历史记录。
git-log文档表明参数--follow
和-M
可以让git log跟踪重命名操作。
我尝试了不同组合的gitlog参数,例如:
git log -M --oneline --all -- --follow newpath/my-file.php
git log -M --oneline --all -- newpath/my-file.php
,甚至使用了
git rev-list --all -- newpath/my-file.php --objects --in-commit-order | git log --no-walk --oneline --stdin
但无论我尝试什么,历史记录总是在文件所在的父文件夹被重命名的提交处结束。
我已经确认:
只有文件夹在重命名提交中被重命名,文件的内容完全没有改变,所以git应该简单地发现旧路径上的文件和新路径上的文件是相同的,只是被重命名了。
对于重命名提交,
git short name-status
显示R100 oldpath/my-file.php newpath/my-file.php
(这证实了文件的内容完全相同)。历史记录的“旧半部分”和“新半部分”似乎都是正确的,两者都包括重命名提交。
当我运行
git log -M --oneline --all -- --follow newpath/my-file.php
时,最早的提交是0979744 重命名:oldpath/ -> newpath/
。当我运行
git log -M --oneline --all -- --follow oldpath/my-file.php
时,最新的提交是0979744 重命名:oldpath/ -> newpath/
。
所以一切看起来都像是我的git成功理解了文件在新路径和旧路径上的重命名。
即使我使用了-M
和--follow
选项,为什么历史记录仍然在重命名提交时出错?
git log -M --oneline --all --follow -- newpath/my-file.php
,那会发生什么?其中,--
标记表示选项结束。 - Niloct--follow
放在--
后面是解决方案。 - Radon8472--grep="rename" --invert-grep
来删除“重命名”提交时,我得到了0个结果。 - Radon8472--
部分后面不能添加任何选项。 - Niloct