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 跟踪的文件
- 删除未跟踪的文件:
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 -xgit clear · 将 Git 工作目录清理至如同刚克隆时的状态(包含 .gitignore 中的文件)
属于
git-extras的一部分。 更多信息:https://github.com/tj/git-extras/blob/main/Commands.md#git-clear。
- 重置所有已跟踪文件并删除所有未跟踪文件(包括
.gitignore中的文件):
bash
git cleargit clear-soft · 将 Git 工作目录清理至如同刚克隆时的状态(不包含 .gitignore 中的文件)
属于
git-extras一部分。 更多信息:https://github.com/tj/git-extras/blob/main/Commands.md#git-clear-soft。
- 重置所有已跟踪文件并删除所有未跟踪文件:
bash
git clear-soft继续阅读
- Git完整实践与解答
- Git任务与配置
- Git任务与配置