我有一个文件./new-path/file.java
,该文件受Git控制。在较早的提交(<SHA-1>
)中,其路径为./older-path
。现在,我要还原其在<SHA-1>
中提交的旧内容。
我可以通过执行git checkout <SHA-1> -- ./older-path/file.java
还原该文件,然后将其内容复制到./new-path/file.java
。但是我必须对多个较旧的提交执行上述步骤,因此不适合这种方式。如何通过Git 直接完成?
答案 0 :(得分:3)
您不能,但这实际上不是问题。
如果您要求Git按名称将其注销 ,您将获得旧名称。
如果您要求Git向您显示内容,请使用旧名称执行此操作,然后该内容进入标准输出,您可以重定向该输出,但不使用Git。因此,您可以直接执行此操作,但不能直接通过Git 进行操作:
git show <hash>:./older-path/file.java > new-path/file.java
请注意,git show
将不应用过滤器(包括行尾过滤)。添加--textconv
应该引起它进行这种转换,但是在我的实验中(使用Git 2.19.0)这不起作用。一种替代方法是使用git cat-file --filters <hash>:<path>
,它似乎确实有效。但是,使用的过滤器是在 current .gitattributes
中定义的过滤器,而不是与指定提交关联的.gitattributes
。