跳到主要内容

重置

git resetGit 中一个强大的命令,主要用于 撤销更改移动 HEAD 指针

一、核心功能

  • 移动 HEAD 指针 : 改变当前分支所指向的提交,。这允许“撤销”提交,将分支指针移回之前的某个提交
  • 更新暂存区 : 根据制定的选项,决定是否将暂存区的内容同步回 HEAD 指向的提交状态
  • (可选)更新工作目录 : 根据制定的选项,决定是否将工作目录的内容同步回 HEAD 指向的提交状态(这是很危险的)

二、 get reset 的模式

git reset 需要指定一个 模式 ,这个模式决定了操作会影响哪些区域( HEAD , Index , Working Directory )。

模式--soft--mixed (默认模式)--hard
移动 HEAD
更新暂存区
更新工作目录

1. --soft

相当于“撤销”了自目标提交以来的所有 git commitgit add 操作。所有在目标提交之后所做的提交变成了“未暂存的更改”。

最常见的用途是合并多个提交或修改最近提交的信息(通常结合 git commit -- amend

2. --mixed 默认模式

撤销了自目标以来的所有 git add 操作(取消暂存),但保留了工作目录的更改。

这是最常用的模式,用于撤销 git add 或清理暂存区。

3. --hard

彻底丢弃自目标提交以来的所有本地更改(包括未提交的提交和未暂存的修改),将工作目录、暂存区和 HEAD 都回退到指定的提交。

三、其他有用的 git reset 选项/用法

1. git reset -- <file> ...

这个语法只重置 暂存区 中指定的文件,使其匹配 HEAD 提交中的对应文件。

不会 移动 HEAD 指针,也 不会 影响工作目录。

效果等于 git restore --staged <file> ,用于取消特定文件的暂存。

2. git reset --merge/git reset --merge ORIG_HEAD

在合并冲突中终止合并。它会尝试恢复到开始合并前的状态(ORIG_HEAD),并停止合并过程。比直接 reset --hard 安全。

3. git reset --keep

移动 HEAD 到目标提交,但尝试保留工作目录中那些尚未提交的、与重置不冲突的更改。

如果工作目录中会有与目标提交冲突的修改,重置会失败。比 --hard 更安全,比 --mixed 更智能地保留工作目录修改。