git reset

文章目录

1.简介

git reset 将当前 HEAD 重置为指定状态,可用于版本回退。

可将分支重设(reset)到指定的<commit>,如果不显示指定 commit,默认是 HEAD,即最近一次提交。

比如我们 commit 后,可能发现这次 commit 的内容有错误,那么有两种处理方法:

(1)修改错误内容,再次 commit。

(2)使用 git reset 撤销这一次错误的 commit。

第一种方法比较直接,但会多一次 commit 记录,建议使用 git reset 进行版本回退,方便快捷,错误的 commit 记录不会被保留下来。

2.命令格式

shell 复制代码
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)放弃当前版本的所有修改。

shell 复制代码
git reset --hard
git reset --hard HEAD

(2)分支版本跳转。

shell 复制代码
git reset --hard [commit]

commit 可取值 HEAD 当前版本,上一个版本 HEAD^(或 HEAD~1),上上个版本就是 HEAD^^(或 HEAD~2),以此类推。缺省为 HEAD。

(3)将暂存区的修改回退到工作区。

shell 复制代码
git reset <file>...
git reset HEAD <file>...
git reset --mixed <file>...
git reset --mixed HEAD <file>...

(4)将本地分支恢复至远端仓库的最新提交。

如果你已经使用 git reset --hard 回滚了本地代码,现在需要将分支恢复至远端仓库的最新提交,一般有两种方式:

方法一:硬重置(推荐)

直接将本地分支指向远端分支的最新提交(如 origin/main):

shell 复制代码
git reset --hard origin/main

效果:

本地 HEAD 和分支指针会与 origin/main 完全一致。

丢弃所有未提交的本地修改(包括未暂存的文件),确保与远端代码一致。

方法二:删除本地分支并重新检出

shell 复制代码
# 选项 -B 为强制模式:无论分支是否存在,均强制创建/重置分支。若分支已存在,会将其指向新的起点。
git checkout -B main origin/main

或分步操作:

shell 复制代码
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

相关推荐
胡小禾1 小时前
Git Worktree
git
程序员小羊!1 小时前
18 GIt
git
怣疯knight1 小时前
Git 本地分支关联远程分支 常用命令汇总
git
ANNENBERG2 小时前
git分支开发管理
git
坤坤藤椒牛肉面2 小时前
GIT的使用
git
w3296362712 小时前
使用 OpenCode 在 Windows 上加速安装 Playwright 的完整指南
windows·git
我家媳妇儿萌哒哒20 小时前
git:无法推送refs到远端。您可以试着运行“拉取”功能,整合您的更改。
git
驯龙高手_追风1 天前
Gitlab本地服务器搭建及配置-详细教程
git·github
czhc11400756631 天前
6.11:halcon,Sqlserver;项目sql连接;git
git·sql·sqlserver
炸炸鱼.1 天前
Git+Jenkins 基本使用:从入门到实战(知识点大全)
运维·git·jenkins