如何用 Git 查看文件的历史版本
查看文件旧版本:git log -- <文件> 找到提交,git show <提交>:<路径> 直接输出内容;保存到本地用 git show <提交>:<路径> > 旧版本.txt;恢复用 git restore --source=<提交> <文件>。
看内容用 git show <提交哈希>:<文件路径>:直接把这个文件在该提交时的完整内容输出到终端。先用 git log --oneline -- <文件路径> 找到它变更过的提交。
常用操作
# 1. 找到这个文件的变更历史
git log --oneline -- src/app.js
# 2. 查看某个提交时的完整内容
git show a1b2c3d:src/app.js
# 3. 导出旧版本到本地文件
git show a1b2c3d:src/app.js > app-old.js
# 4. 只看该提交对这个文件改了什么
git show a1b2c3d -- src/app.js
# 5. 相对引用:看 3 个提交前的版本
git show HEAD~3:src/app.js
其他查看方式
- 对比两个版本:
git diff A B -- src/app.js; - 图形化:
gitk -- src/app.js,或 IDE 的 Git History 插件; - GitHub 网页:文件页面按
y锁定提交哈希,或 Blame 视图逐行追溯。
想恢复旧版本
git restore --source=a1b2c3d src/app.js # 恢复内容到工作区(旧语法 git checkout a1b2c3d -- 路径)
常见问题(FAQ)
Q:文件改过名怎么查历史?
git log --follow -- 新路径 会跨重命名跟踪历史。拿到旧路径后 git show 提交:旧路径 查看。
Q:已删除的文件怎么找回内容?
git log --diff-filter=D -- 路径 找到删除它的提交,然后 git show 删除前的提交^:路径(注意 ^ 指父提交)看最后内容。
Q:show 输出中文乱码?
Git 默认对非 ASCII 路径转义;git config core.quotepath false 解决路径乱码。文件内容本身按原编码输出,终端编码匹配即可。