14-reset 的本质

发布时间:2026/8/7 10:59:05
14-reset 的本质 前面讲到在最新的commit写错时可以用reset --hard来把commit撤销git reset --hard HEAD^用这行代码可以撤销掉当前commit现在就说说reset命令的本质分析它在撤销提交之外的用途。reset 的本质移动 HEAD 以及它所指向的 branchreset这个指令虽然可以用来撤销commit但它的实质行为并不是撤销而是移动HEAD并且「捎带」上HEAD所指向的branch如果有的话。也就是说reset这个指令的行为其实和它的字面意思 reset重置十分相符它是用来重置HEAD以及它所指向的branch的位置的。而reset --hard HEAD^之所以起到了撤销commit的效果是因为它把HEAD和它所指向的branch一起移动到了当前commit的父commit上从而起到了「撤销」的效果Git 的提交历史只能往回看不能向未来看所以把HEAD和branch往回移动就能起到撤回commit的效果。reset使用--hard选项不仅可以撤销提交还可以用来把HEAD和branch移动到其他任何地方。git reset --hard branch2那么reset后面总是跟着的那个--hard是什么意思呢reset指令可以重置HEAD和branch引用的commit ID不过在重置它们的同时对工作目录可以选择不同的操作对工作目录不同操作就是通过reset后面跟不同的参数来确定的。reset --hard重置工作目录重置暂存区当你在reset后面加了--hard参数时你工作目录里的内容会被完全重置为和HEAD的新位置相同的内容你工作目录中未提交的修改也会被全部擦除掉。例如你在上次commit之后对文件做了一些改动git status然后你执行了reset并附上了--hard参数git reset --hard HEAD^结果就是你的HEAD和当前branch切到上一条commit的同时你工作目录里的新改动也一起全都消失了不管它们是否被放进暂存区因为暂存区也和工作目录一样会被新位置的内容替换git status可以看到在reset --hard后所有的改动都被擦掉了。reset --soft保留工作目录差异放到暂存区reset --soft会在重置HEAD和branch时更改指向的commit保留工作目录和暂存区中的内容并把重置HEAD所带来的新的差异放进暂存区。什么是「重置HEAD所带来的新的差异」就是这里由于HEAD从4移动到了3而且在reset的过程中工作目录的内容没有被清理掉所以4中的改动在reset后就也成了工作目录新增的「工作目录和HEAD的差异」。所以在同样的情况下git status当前commit的改动内容是新增了laughters.txt文件git show --stat如果这时你执行git reset --soft HEAD^那么除了HEAD和它所指向的branch1被移动到HEAD^之外原先HEAD处commit的改动也就是那个laughters.txt文件也会被放进暂存区git status这就是--soft和--hard的区别--hard会清空工作目录的改动而--soft则会保留工作目录的改动并把因为保留工作目录内容所带来的新的文件差异放进暂存区。reset 不加参数保留工作目录并清空暂存区reset如果不加参数那么默认使用--mixed参数。它的行为是保留工作目录并且清空暂存区。也就是说工作目录的修改、暂存区的内容以及由reset所导致的新的文件差异都会被放进工作目录。简而言之就是「把所有差异都混合mixed放在工作目录中」。还以同样的情况为例git status修改了games.txt和shopping list.txt并把games.txt放进了暂存区。git show --stat最新的commit中新增了laughters.txt文件。这时如果你执行无参数的resetgit reset HEAD^工作目录的内容和--soft一样会被保留但和--soft的区别在于它会把暂存区清空git status小结本节内容讲了reset指令的本质重置HEAD及其所指向branch的位置。同时介绍了reset的三种参数--hard重置HEAD指向位置的同时清空工作目录的所有改动--soft重置HEAD指向位置的同时保留工作目录和暂存区的内容并把重置HEAD指向位置所导致的新的文件差异放进暂存区。--mixed重置HEAD指向位置的同时保留工作目录的内容、清空暂存区并把重置HEAD指向位置所导致的新的文件差异都混合放进工作目录中默认操作。除了上面这三种参数还有一些没有列出的较为不常用的参数另外除了这三种功能外其实reset其实也还有一些别的功能和用法。不过reset最关键的功能、用法和本质原理就是上面这些想了解更多的话可以去官网了解一下。

相关新闻