资讯动态

Git Reset命令介绍(用于移动HEAD,并选择是否同步更新暂存区工作区)三种模式:--soft、--mixed(默认)、--hard;修改最近提交、合并多个提交、取消git add、回退版本回退

发布时间:2026/8/22 12:51:36 来源:尧图企业网站定制
注意区分git reset和git reset HEAD~1功能完全不同git reset只用于取消文件暂存命令移动HEAD重置暂存区保留工作目录更改主要用途git reset❌ 不移动✅ 重置到HEAD✅ 保留取消文件暂存git reset HEAD~1✅ 移动到前一个提交✅ 重置✅ 保留撤销最后一次提交保留修改git reset --mixed HEAD~1✅ 移动到前一个提交✅ 重置✅ 保留同上与上者等价文章目录Git Reset 命令详解撤销提交、回退代码与重置状态一、理解 Git 三大区域核心前提1. Working Directory工作区2. Staging Area暂存区 / Index3. Repository本地仓库二、git reset 的本质三、reset 的三种模式最核心四、git reset --soft作用示例等价理解常见用途1. 修改最近一次 commit2. 合并多个 commit五、git reset --mixed默认作用示例状态变化最常见用途1. 取消 git add2. 拆分一次提交六、git reset --hard作用示例七、hard reset 的危险性非常重要使用前建议八、reset 常见写法1. 回退一个 commit2. 回退两个 commit3. 回退到指定 commit4. 仅取消暂存5. 重置所有暂存九、HEAD~1 是什么意思含义十、git reset 的典型场景场景 1commit message 写错场景 2提交了不该提交的文件将指定文件从暂存区Staging Area中移除但保留工作目录中的修改内容场景 3commit 太大想拆分场景 4彻底放弃本地修改场景 5本地回退到远程版本十一、git reset 与 git revert 的区别git resetgit revert对比十二、已经 push 后还能 reset 吗force强制推送注意如果已经push了再用reset直接用push不加参数是百分之百拒绝的更安全方式十三、reset 后如何恢复reflog示例十四、reset 的思维模型非常重要十五、实际开发建议推荐原则日常取消 add修改 commit已 push 的 commit慎用 hard十六、总结Git Reset 命令详解撤销提交、回退代码与重置状态在 Git 的日常使用中git reset是一个非常强大、也非常容易误用的命令。很多开发者第一次接触它时都会被它的行为搞混为什么有时候只是取消暂存为什么有时候会回退 commit为什么有时候代码直接没了--soft、--mixed、--hard到底有什么区别这篇文章会系统讲清楚git reset的本质三种 reset 模式reset 对 Git 三大区域的影响常见使用场景与git revert的区别如何避免误操作一、理解 Git 三大区域核心前提学习git reset前必须先理解 Git 的三个区域。1. Working Directory工作区你实际编辑代码的目录。例如vimapp.py修改的内容先存在工作区。2. Staging Area暂存区 / Index通过gitadd加入的内容。它表示“下一次 commit 我要提交这些内容”3. Repository本地仓库通过gitcommit真正保存的历史记录。二、git reset 的本质一句话理解git reset用于“移动 HEAD”并选择是否同步更新暂存区和工作区。也就是说gitreset本质上是在HEAD - 指向新的 commit然后根据参数决定是否修改暂存区是否修改工作区三、reset 的三种模式最核心Git reset 最重要的三个模式模式HEAD暂存区工作区--soft✔❌❌--mixed默认✔✔❌--hard✔✔✔这是整个 reset 的核心。下面逐个解释。四、git reset --soft作用只移动 HEAD。不会修改暂存区工作区示例当前A - B - C (HEAD)执行gitreset--softHEAD~1结果A - B (HEAD)commit C 被“取消”。但是C 的代码还在并且仍然在暂存区等价理解相当于“撤销 commit但保留提交内容”常见用途1. 修改最近一次 commit例如提交信息不小心写错了gitcommit-mwrong message想改 commit messagegitreset--softHEAD~1gitcommit-mcorrect message# 因为没有影响暂存区和工作去可以直接改为正确提交信息再提交2. 合并多个 commit例如A - B - C - D想把C D合并gitreset--softHEAD~2gitcommit-mcombined changes五、git reset --mixed默认这是默认模式。即gitreset HEAD~1等价于gitreset--mixedHEAD~1作用移动 HEAD重置暂存区保留工作区示例执行gitreset--mixedHEAD~1结果commit 被取消文件修改还在但不再处于 staged 状态状态变化之前已 commit之后modified需要重新gitaddgitcommit最常见用途1. 取消 git add例如gitadd.误加文件。取消暂存gitreset注git reset相当于git reset HEAD只重置暂存区index到HEAD状态不会移动HEAD指针。主要用于取消文件的暂存状态unstage files比如把已经git add的文件移出暂存区不会回退任何提交。或者gitreset file.txt2. 拆分一次提交比如你一次提交了很多文件gitcommit想拆成多个 commitgitreset HEAD~1然后重新gitaddfileAgitcommitgitaddfileBgitcommit六、git reset --hard这是最危险的模式。作用同时重置HEAD暂存区工作区示例执行gitreset--hardHEAD~1结果commit 消失staged 消失工作区修改也消失相当于“彻底回到旧版本”七、hard reset 的危险性非常重要gitreset--hard可能导致未提交代码永久丢失尤其gitreset--hardorigin/main会直接覆盖本地修改。使用前建议先查看状态gitstatus或者先备份gitstash八、reset 常见写法1. 回退一个 commitgitreset HEAD~12. 回退两个 commitgitreset HEAD~23. 回退到指定 commitgitreset a1b2c3d4. 仅取消暂存gitreset file.txt5. 重置所有暂存gitreset九、HEAD~1 是什么意思例如A - B - C - D (HEAD)含义写法含义HEAD当前 commitHEAD~1上一个 commitHEAD~2上上个 commit十、git reset 的典型场景场景 1commit message 写错gitreset--softHEAD~1gitcommit-mnew message场景 2提交了不该提交的文件将指定文件从暂存区Staging Area中移除但保留工作目录中的修改内容gitreset HEAD file.txt等价于gitreset file.txt场景 3commit 太大想拆分gitreset HEAD~1重新 add。场景 4彻底放弃本地修改gitreset--hard场景 5本地回退到远程版本gitfetch origingitreset--hardorigin/main十一、git reset 与 git revert 的区别这是高频面试题。git reset本质修改历史特点commit 消失会改变历史指改变提交历史以及“可能”改变工作区代码如果用hard模式git reset --hard HEAD~1的话不适合已经 push 的 commitgit revert本质新建一个“反向 commit”例如A - B - Crevert C 后A - B - C - DD 是“撤销 C”的 commit。对比对比项resetrevert是否改历史✔❌是否安全较危险更安全是否适合已 push❌✔是否删除 commit✔❌十二、已经 push 后还能 reset 吗可以。但危险。force强制推送gitreset--hardHEAD~1gitpush--force会改写远程历史影响团队成员注意如果已经push了再用reset直接用push不加参数是百分之百拒绝的更安全方式优先gitrevert十三、reset 后如何恢复reflog很多人不知道Git 很少真正删除 commit。可以通过gitreflog查看历史 HEAD。示例gitreflog输出a1b2c3 HEAD{0}: reset: moving to HEAD~1 d4e5f6 HEAD{1}: commit: add feature操作reflog 索引时间顺序commit: add featureHEAD{1}前reset: moving...HEAD{0}后数字越大时间越早恢复gitreset--hardd4e5f6十四、reset 的思维模型非常重要记住一句话reset 移动 HEAD然后模式是否同步暂存区是否同步工作区soft否否mixed是否hard是是十五、实际开发建议推荐原则日常取消 add用gitreset修改 commit用gitreset--soft已 push 的 commit优先gitrevert慎用 hard尤其gitreset--hard执行前一定确认。十六、总结git reset是 Git 中最核心、也最容易误操作的命令之一。它真正的本质是移动 HEAD并决定是否同步暂存区和工作区。记住这张表即可理解 90% 的 reset模式HEAD暂存区工作区soft✔❌❌mixed✔✔❌hard✔✔✔开发中最常见的用途撤销 commit取消暂存拆分 commit回退版本放弃修改但同时git reset --hard也可能让代码永久丢失。所以reset 前先git status重要修改先git stash已 push 历史优先git revert这样才能安全、高效地使用 Git。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价