MiniMax M3 发布引定价风波,看这家公司如何在争议中追求从 Mini 到 Max
2026/7/10 5:14:10
git checkout -- .详解想象一下,你在玩一个闯关游戏,不小心走进了死胡同,这时你会怎么做?没错,“读档重来”!在Git的世界里,git checkout -- .就是你的游戏存档读取功能!
让我用一个真实的故事开始:
小王今天兴致勃勃地修改了10个文件,想要给项目添加一个新功能。但是改着改着,代码越来越乱,他突然意识到:“完了,我把事情搞砸了!” 这时候,他有三个选择:
- 手动撤销每个文件的修改(耗时耗力)
- 删除项目重新下载(可能丢失其他文件)
- 使用Git的时光机——
git checkout -- .(一键回到昨天)
git checkout -- .“将当前目录(包括子目录)中所有已跟踪文件的修改,恢复到最近一次提交的状态”
先创建一个实验环境:
# 1. 创建一个实验项目mkdirgit-experiment&&cdgit-experimentgitinit# 2. 创建并提交一个初始文件echo"第一行内容">demo.txtgitadddemo.txtgitcommit -m"初始提交"# 3. 查看当前状态gitstatus# 显示"无修改"# 修改文件echo"乱改的内容">>demo.txt# 查看修改catdemo.txt# 输出:# 第一行内容# 乱改的内容# 使用时光机!gitcheckout --.# 再看文件catdemo.txt# 输出:# 第一行内容# 魔法般恢复了!# 创建多个文件并修改echo"内容1">file1.txtecho"内容2">file2.txtgitadd.# 先添加到跟踪列表gitcommit -m"添加两个文件"# 同时修改三个文件echo"乱写1">>demo.txtecho"乱写2">>file1.txtecho"乱写3">>file2.txt# 查看状态gitstatus# 你会看到三个文件都被修改了# 一键恢复所有!gitcheckout --.gitstatus# 一切恢复原状!这是最重要的一点:git checkout -- .就像是"烧掉草稿纸"——一旦执行,修改就永远消失了(除非你有备份)。
# 以下内容不会被恢复:# 1. 新创建但未跟踪的文件(Git还不知道它们的存在)echo"新文件">new_file.txtgitcheckout --.# new_file.txt依然存在!# 2. 已添加到暂存区(staged)的修改gitadddemo.txtgitcheckout --.# 对demo.txt无效!# 3. 已提交(committed)的修改gitcommit -m"已提交"gitcheckout --.# 无效!git checkout -- 文件名# 只恢复单个文件gitcheckout -- demo.txt# 仅demo.txt恢复,其他文件保持修改git reset --hard# 更强大的恢复(包括暂存区的修改)gitadd.gitcheckout --.# 无效,因为修改已暂存gitreset --hard# 有效!连暂存区一起清空git restore(新版Git推荐)# 现代版的checkoutgitrestore.# 效果等同于git checkout -- .gitrestore file1# 恢复单个文件开始:我有未保存的修改 ↓ 想要完全放弃? → No → 使用git stash暂存 ↓ Yes 修改是否已暂存? → Yes → 使用git reset HEAD . ↓ No 修改是否已提交? → Yes → 使用git revert ↓ No 只想恢复部分文件? → Yes → git checkout -- 文件名 ↓ No 使用 git checkout -- . ✅在执行git checkout -- .之前,务必:
# 1. 先看看自己改了啥(预览功能)gitdiff# 2. 看看哪些文件会受影响gitstatus# 3. 如果重要,先备份(最安全)cp-r project/ project-backup/# 4. 或者使用更温和的查看命令gitcheckout --.--dry-run# 如果有这个选项的话如果不小心执行了,但还没关掉终端:
# 在部分编辑器中可以恢复# Vim: :e! 重新加载# VS Code: Ctrl+Z(文件内撤销)| 命令 | 比喻 | 效果 |
|---|---|---|
git checkout -- . | 撤销笔迹:橡皮擦掉草稿纸上的字 | 恢复工作区修改 |
git reset HEAD . | 撤回投递:从邮箱拿回还没寄的信 | 取消暂存(unstaged) |
git reset --hard | 时光倒流:回到昨天早上起床时 | 恢复到最后一次提交 |
git stash | 暂存箱子:把东西放进储物箱待用 | 临时保存修改 |
# 你尝试了一个新想法,但测试失败了echo"实验代码...">>important.py# 运行测试...# 测试失败,想放弃修改gitcheckout -- important.py# 安全恢复# 从错误的分支合并了代码gitmerge wrong-branch# 发现不对!gitcheckout --.# 恢复所有文件到合并前# IDE自动修改了文件格式,但你不想要# 发现所有.py文件都被改了gitcheckout --"*.py"# 恢复所有py文件# 先查看哪些文件被修改gitstatus# 只恢复不想保留的文件gitcheckout -- 不想保留的文件.txt# 保留想要的文件,暂存它们gitadd想保留的文件.txt# 在恢复前创建分支作为备份gitbranch backup-before-checkout# 执行恢复gitcheckout --.# 如果后悔了gitcheckout backup-before-checkout# 经常提交,形成小的"存档点"gitadd.gitcommit -m"工作进展"# 这样checkout时损失最小# 避免临时文件被跟踪echo"*.tmp">>.gitignoreecho".idea/">>.gitignoregit checkout -- .✅适合使用的情况:
❌不适合使用的情况:
git reset HEAD .)git checkout -- 文件名)git stash)git revert)如果你想深入学习Git的恢复功能:
git reflog:查看所有操作记录git cherry-pick:选择性应用提交git bisect:二分查找引入bug的提交记住:git checkout -- .是你 Git 工具箱中的"紧急重置按钮",威力强大但需要谨慎使用。在按下这个按钮前,深呼吸,检查一下,确保这是你真正想要的操作。
就像电影《回到未来》中的时光机一样,Git的恢复功能很强大,但**"回到过去"总是需要承担风险**。掌握好这些工具,让它们成为你编程路上的助力,而不是意外删除代码的噩梦!🚀