主题
  • 默认模式
  • 浅蓝色模式
  • 淡绿色模式
  • 深夜模式

git reset 命令

Git 基本操作


git reset 命令用于修改当前分支的 HEAD 指针位置,从而实现版本回退或修改提交历史的目的。

git reset 命令主要有三种常用模式,分别适用不同场景:软重置、混合重置、硬重置。

Git Reset 的三种模式


基本语法

基本语法如下:

git reset [选项] <提交ID>

其中 <提交ID> 是目标版本的哈希值(可以用git log查看),常用选项包括:

  • --soft:软重置
  • --mixed(默认):混合重置
  • --hard:硬重置

软重置(--soft)

软重置会将 HEAD 指针移动到指定提交,但不会修改暂存区和工作区的内容。适用于需要修改最近一次提交的情况。

git reset --soft <提交ID>

工作原理:

  • 仅移动当前分支的 HEAD 指针到指定提交
  • 暂存区(index)内容保持不变
  • 工作区内容保持不变

使用实例:

$ git reset --soft HEAD            # 撤销所有提交的更改(常用操作)
$ git reset --soft HEAD^^           # 回退所有内容到上上一个版本
$ git reset --soft HEAD^ hello.php  # 回退 hello.php 文件的版本到上一个版本
$ git reset --soft 052e             # 回退到指定版本
$ git reset --soft HEAD~1           # 回退上一个版本
$ git reset --soft HEAD~3           # 回退上上上一个版本

混合重置(默认模式)

混合重置会将 HEAD 指针移动到指定提交,同时重置暂存区的内容,但保留工作区的修改。适用于需要撤销暂存区的修改但保留工作区修改的情况。

git reset --mixed <提交ID>

工作原理:

  • 移动当前分支的 HEAD 指针到指定提交
  • 重置暂存区,使其与指定提交的状态一致
  • 工作区内容保持不变

使用实例:

$ git reset HEAD             # 撤销所有暂存区的更改(常用操作)
$ git reset HEAD^            # 回退所有内容到上一个版本
$ git reset HEAD^ hello.php  # 回退 hello.php 文件的版本到上一个版本
$ git reset 052e             # 回退到指定版本
$ git reset --soft HEAD~1    # 回退上一个版本
$ git reset --soft HEAD~3    # 回退上上上一个版本

硬重置(--hard)

硬重置会将 HEAD 指针移动到指定提交,同时重置暂存区和工作区的内容。适用于需要彻底回退到某个版本的情况,但会丢失所有未提交的更改。

git reset --hard <提交ID>

工作原理:

  • 移动当前分支的 HEAD 指针到指定提交
  • 重置暂存区,使其与指定提交的状态一致
  • 重置工作区,使其与指定提交的状态一致
  • 所有未提交的更改将被丢弃

使用实例:

$ git reset --hard HEAD^            # 回退所有内容到上一个版本(丢弃所有未提交的更改)
$ git reset --hard HEAD^ hello.php  # 回退 hello.php 文件的版本到上一个版本(丢弃所有未提交的更改)
$ git reset --hard 052e             # 回退到指定版本(丢弃所有未提交的更改)
$ git reset --hard HEAD~1           # 回退上一个版本(丢弃所有未提交的更改)
$ git reset --hard HEAD~3           # 回退上上上一个版本(丢弃所有未提交的更改)

关键区别总结

三种模式的主要区别在于对暂存区和工作区的影响:

模式 工作目录更改 暂存区更改 适用场景
--soft 保留 保留 修改提交历史(如合并提交)
默认混合 保留 丢弃 撤销 git add(取消暂存)
--hard 丢弃 丢弃 彻底放弃未提交的更改

Git 基本操作



评论区 0
发表评论