84 git history dvcs rename git-log
我已经重命名了几个文件git mv
,使用git stash
过,快速查看了HEAD(没有更改它),然后又git stash pop
重新获得了全部.我的动作已经从提交列表中消失了,所以我重新使用它们git rm
并且提交消息声称git发现重命名是重命名.所以我没想到它.
但是现在,提交后,我无法获取移动文件的历史记录!以下是git对有关提交的说法:
~/projects% git log --summary
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date: Wed Dec 8 22:37:54 2010 +0000
Moved R_DebugUI into runtime
delete mode 100644 test/R_DebugUI_iOS.h
delete mode 100644 test/R_DebugUI_iOS.m
create mode 100644 system/runtime/src/R_DebugUI_iOS.h
create mode 100644 system/runtime/src/R_DebugUI_iOS.m
<<snip older commits>>
~/projects%
Run Code Online (Sandbox Code Playgroud)
我现在正试图获取其中一个移动文件的历史记录,所以我可以看一个旧版本,但我没有得到任何非常有用的东西:
~/projects/system/runtime/src% git log --follow --find-copies-harder -M -C R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date: Wed Dec 8 22:37:54 2010 +0000
Moved R_DebugUI into runtime
~/projects/system/runtime/src%
Run Code Online (Sandbox Code Playgroud)
(我也尝试过没有-M
,-C
和--find-copies-harder
,但无济于事.)
我可以使用旧名称获取其历史记录,该名称在从旧位置删除时停止:
~/projects% git log --summary --follow --find-copies-harder -M -C -- test/R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date: Wed Dec 8 22:37:54 2010 +0000
Moved R_DebugUI into runtime
delete mode 100644 test/R_DebugUI_iOS.m
commit 32a22d53c27e260714f759ecb3d3864e38b2e87f
Author: brone
Date: Tue Dec 7 23:52:51 2010 +0000
Can set debug UI's alpha.
<<snip older commits>>
~/projects%
Run Code Online (Sandbox Code Playgroud)
所以这次我并没有完全陷入困境,但我不想一直这样做.(我预计会有相当数量的文件在他们的生活中至少移动一次.)
难道我做错了什么?该文件的旧副本和新副本的相同度为98.8%(166中的2行已更改).我的理解是git应该能够在这种情况下跟踪文件,因为它推断重命名操作而不是显式存储它们,并且文件足够相似,我相信它应该认为它们是相同的.
有什么办法可以解决这个问题吗?
小智 109
请试试git log --follow
你的文件.我从这里学习是否可以在git中移动/重命名文件并保持其历史记录?
小智 16
回答我自己的问题,因为我已经设法减轻了我的担忧,即使我没有完全解决我的问题.(git log --follow
但仍然不适合我.)
首先,--summary
重命名提交的日志包括delete
具有文件旧名称的行.因此,如果它很容易被发现,你可以git log
从那里找到它的旧名称.
如果它是一些大型提交的一部分,因此有点难以发现 - 这种情况是我的担心之一 - git blame -C
可以在第一次重命名后修订时使用文件的新名称.据推测,原始文件中的行仍然存在! - 所以git应该找到它们的源代码,并显示旧的文件名(和一个提交哈希值以获得良好的衡量标准).然后你可以拿起小道git log
.
因此,如果您对文件的历史感兴趣(无论出于何种原因),那么它似乎可以相对简单地完成.虽然我得到的印象git更喜欢你正确使用它.
git log --follow ./path/to/file
Run Code Online (Sandbox Code Playgroud)
我相信这就是你要找的东西.