git reset
文章目录
- 1.简介
- 2.命令格式
- 3.选项说明
- 4.常用示例
- 5.小结
- 参考文献
1.简介
git reset 将当前 HEAD 重置为指定状态,可用于版本回退。
可将分支重设(reset)到指定的<commit>
,如果不显示指定 commit,默认是 HEAD,即最近一次提交。
比如我们 commit 后,可能发现这次 commit 的内容有错误,那么有两种处理方法:
(1)修改错误内容,再次 commit。
(2)使用 git reset 撤销这一次错误的 commit。
第一种方法比较直接,但会多一次 commit 记录,建议使用 git reset 进行版本回退,方便快捷,错误的 commit 记录不会被保留下来。
2.命令格式
git reset [-q] [<tree-ish>] [--] <paths>…
git reset (--patch | -p) [<tree-ish>] [--] [<paths>…]
git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
3.选项说明
-q, --quiet静默模式,只打印错误信息。
--soft重置 HEAD,保留暂存区和工作区。版本库的修改会回退到暂存区,工作区的修改保持不动。
--mixed重置 HEAD 和暂存区,保留工作区。版本库与暂存区的修改都将回退到工作区,即回滚到了所有 git add 和 git commit 的执行之前的状态。为默认模式
--hard重置 HEAD、暂存区和工作区。暂存区和工作区的修改都将被丢弃。请谨慎使用,暂存区的修改很难找回,工作区的修改无法找回。
--merge重置 HEAD 和暂存区,保留工作区。与 --mixed 不同的是,暂存区的修改不会回退到工作。如果工作区的某个文件与暂存区不同,则命令执行失败。该选项很少使用
--keep重置 HEAD 与暂存区,保留工作区。与 --mixed 不同的是,暂存区的修改不会回退到工作。与 --merge 的区别是,如果工作区的某个文件与暂存区不同,则命令不会执行失败。该选项很少使用。
-p, --patch以 patch 的方式展示出来需要 reset 的代码, git reset -p 和 git add -p 就是一对互为反向的操作,后者是把工作目录下变更的代码以 patch 的方式展示出来,以互动的方式应用到 index 上,前者则是一个反向操作
-N, --intent-to-add任何新加入到 HEAD 的文件,再回退到工作区后都将标记为 tracked,即受版本控制
4.常用示例
(1)放弃当前版本的所有修改。
git reset --hard
git reset --hard HEAD
(2)分支版本跳转。
git reset --hard [commit]
commit 可取值 HEAD 当前版本,上一个版本 HEAD^(或 HEAD~1
),上上个版本就是 HEAD^^(或 HEAD~2
),以此类推。缺省为 HEAD。
(3)将暂存区的修改回退到工作区。
git reset <file>...
git reset HEAD <file>...
git reset --mixed <file>...
git reset --mixed HEAD <file>...
(4)将本地分支恢复至远端仓库的最新提交。
如果你已经使用 git reset --hard 回滚了本地代码,现在需要将分支恢复至远端仓库的最新提交,一般有两种方式:
方法一:硬重置(推荐)
直接将本地分支指向远端分支的最新提交(如 origin/main):
git reset --hard origin/main
效果:
本地 HEAD 和分支指针会与 origin/main 完全一致。
丢弃所有未提交的本地修改(包括未暂存的文件),确保与远端代码一致。
方法二:删除本地分支并重新检出
# 选项 -B 为强制模式:无论分支是否存在,均强制创建/重置分支。若分支已存在,会将其指向新的起点。
git checkout -B main origin/main
或分步操作:
git branch -D main # 删除本地分支
git checkout main # 重新检出(会自动匹配远端分支)
5.小结
git reset 主要用于 修改分支引用(HEAD),通过不同选项控制对 工作目录、暂存区 和 提交历史 的影响,实现以下操作:
- 撤销提交(回退版本)
- 取消暂存文件
- 彻底丢弃本地更改
核心要点:
--soft:只动 HEAD,保留暂存区和工作区,适合修整提交历史。
--mixed:动 HEAD 和暂存区,适合撤销 git add。
--hard:彻底回退,慎用!
口诀: --soft
改记录,--mixed
清暂存,--hard
全丢掉,远程提交别乱搞。
参考文献
Git - git-reset Documentation