使用Git恢复文件时保留文件时间戳——无需git-restore-mtime
使用Git原生命令恢复文件并还原历史时间戳
Git本身没有单一参数直接完成「恢复文件+同步历史时间戳」的操作,但可以通过组合Git命令和系统原生命令实现,无需第三方工具。具体步骤如下:
1. 恢复文件到指定历史版本
先通过git log --oneline <file-path>查看目标文件的提交记录,找到对应版本的提交哈希值,然后用Git检出该版本的文件:
git checkout <commit-hash> -- <file-path>
- 替换
<commit-hash>为目标版本的提交哈希(短哈希即可),<file-path>为文件的相对/绝对路径。 - 若要恢复到当前分支的上一个版本,可简写为
git checkout HEAD~1 -- <file-path>。
2. 获取该版本的提交时间
用Git提取对应提交的标准格式时间戳:
git log -1 --format="%ai" <commit-hash> -- <file-path>
执行后会输出类似2024-05-20 14:30:00 +0800的时间字符串,这就是该文件对应版本的提交时间。
3. 同步文件系统时间戳
根据操作系统,用系统命令将上述提交时间设置为文件的修改时间:
Linux/macOS 系统
使用touch命令:
touch -d "$(git log -1 --format="%ai" <commit-hash> -- <file-path>)" <file-path>
Windows 系统(PowerShell)
通过修改文件属性实现:
(Get-Item "<file-path>").LastWriteTime = (git log -1 --format="%ai" <commit-hash> -- <file-path>)
注意事项
- 批量处理多个文件时,可编写Shell/PowerShell脚本循环执行上述步骤。
- 若出现时区不匹配问题,可将
%ai替换为%ad并添加--date=local参数,输出本地时区时间。 - 检出文件后若需保留当前分支状态,建议在临时分支操作,避免误提交时间戳修改。
内容的提问来源于stack exchange,提问作者Jackson Eckermann
相关产品推荐
相关产品推荐

