Skip to content
← 返回Git列表
Git任务与配置

Git 提交、历史与配置 · 恢复内容、回退提交与清理未跟踪文件 ​

返回分篇目录

恢复内容、回退提交与清理未跟踪文件 ​

先分清工作区恢复、分支回退和未跟踪文件清理,再选择 restore、reset 或 clean;clear/clear-soft 是另外的扩展命令。

git-restore · 从暂存区或指定提交恢复文件。覆盖工作区文件会丢弃该文件未提交的修改,先用 git diff 核对 ​

  • 查看文件尚未暂存的改动:
bash
git diff -- {{path/to/file}}
  • 仅撤销文件的暂存状态,保留工作区修改:
bash
git restore --staged -- {{path/to/file}}
  • 将工作区文件恢复到暂存区版本,会覆盖未暂存修改:
bash
git restore --worktree -- {{path/to/file}}
  • 从指定提交恢复文件到工作区,先确认目标版本:
bash
git restore --source={{commit-hash}} --worktree -- {{path/to/file}}

git reset · 撤销提交或取消暂存,将当前 Git HEAD 重置到指定状态 ​

如果传入文件路径,则执行"取消暂存";如果传入提交哈希或分支名,则执行"撤销提交"。 更多信息:https://git-scm.com/docs/git-reset。

  • 取消暂存所有文件:
bash
git reset
  • 取消暂存指定文件:
bash
git reset {{路径/到/文件1 路径/到/文件2 ...}}
  • 交互式地取消暂存文件的部分内容:
bash
git reset {{[-p|--patch]}} {{路径/到/文件}}
  • 撤销最近一次提交,保留其更改(以及所有未提交的更改)在工作区中:
bash
git reset HEAD~
  • 撤销最近两次提交,将其更改保留到暂存区中:
bash
git reset --soft HEAD~2
  • 丢弃所有未提交的更改(包括已暂存和未暂存的),仅丢弃未暂存的更改请使用 git checkout:
bash
git reset --hard
  • 将仓库重置到指定提交,丢弃该提交之后的所有已提交、已暂存和未暂存的更改:
bash
git reset --hard {{提交哈希}}

git-reflog · 查看本地分支或 HEAD 的移动记录,找回误重置前的提交哈希;记录可能过期,且不是远程备份 ​

  • 查看 HEAD 最近的引用变动:
bash
git reflog -10
  • 查看指定分支的引用日志:
bash
git reflog show {{main}}
  • 找到旧哈希后先检查提交内容,再决定是否恢复:
bash
git show {{commit-hash}} --stat
  • 从旧提交新建分支,避免立刻改写当前分支:
bash
git branch {{recovered-branch}} {{commit-hash}}

git clean · 从工作区删除未被 Git 跟踪的文件 ​

更多信息:https://git-scm.com/docs/git-clean。

  • 删除未跟踪的文件:
bash
git clean
  • 交互式删除未跟踪的文件:
bash
git clean {{[-i|--interactive]}}
  • 显示将被删除的文件(模拟运行,不实际删除):
bash
git clean {{[-n|--dry-run]}}
  • 强制删除未跟踪的文件:
bash
git clean {{[-f|--force]}}
  • 强制删除未跟踪的目录:
bash
git clean {{[-f|--force]}} -d
  • 删除未跟踪的文件(包括被忽略的文件,在 .gitignore 和 .git/info/exclude的文件):
bash
git clean -x

git clear · 将 Git 工作目录清理至如同刚克隆时的状态(包含 .gitignore 中的文件) ​

属于 git-extras 的一部分。 更多信息:https://github.com/tj/git-extras/blob/main/Commands.md#git-clear。

  • 重置所有已跟踪文件并删除所有未跟踪文件(包括 .gitignore 中的文件):
bash
git clear

git clear-soft · 将 Git 工作目录清理至如同刚克隆时的状态(不包含 .gitignore 中的文件) ​

属于 git-extras 一部分。 更多信息:https://github.com/tj/git-extras/blob/main/Commands.md#git-clear-soft。

  • 重置所有已跟踪文件并删除所有未跟踪文件:
bash
git clear-soft

继续阅读