这是我参与8月更文挑战的第4天,活动详情查看: 8月更文挑战
名称
git-reset: Reset current HEAD to the specified state 就是将HEAD重新指向特定的状态,常用的命令有--soft、--mixed、--hard三种模式
概述
- --soft命令:可以将代码回退到指定提交记录的暂存区
- --mixed命令:可以将代码回退到指定提交记录的工作区
- --hard命令:会将指定记录前的代码全部丢弃
基础
首先,我们需要知道平时使用git add、git commit、git push命令具体做了什么,还有工作区,暂存区和本地仓库的意义。
- working tree: 当前的工作区域
- index/stage:暂存区域
- repository:本地仓库
比如我们在本地开发环境修改了test.js文件,这时候我们的working tree 工作区是最新代码; 当我们修改完成后,使用git add命令提交本次修改到index/stage暂存区域内,这时候暂存区域就有了我们的提交记录 接下来我们需要git commit命令提交到repository本地仓库中,这样就会有hash提交记录了。
使用
-
git reset --soft
将respository中的提交记录撤销,回退到git commit 前的状态。这样我们就可以重新提交commit记录了。对应在工作中的使用场景就是:
当我们在开发分支开发了一段时间,进行了多次git add 和 git commit 命令之后。我们的git tree提交记录会有很多杂乱的内容,这时候如果合并到测试或正式分支,会有很多没有意义的提交记录,显得一点也不优雅,也不利于我们后期维护。这时候我们可以reset --soft到此次开发期间最早的一次git commit,然后重新进行git commit。这样就会只有一条commit记录,可以清晰的记录开发内容。
-
git reset --mixed (reset默认值,即不加参数)
将stage暂存区的内容回退到index工作区,就是将git commit 和 git add命令提交的代码都混合回退到工作区,即mixed。
-
git reset --hard
将所有内容回退到指定记录,包括所有未提交的修改。
这种情况一般是在处理代码冲突的时候。当团队开发人员增多,开发分支和版本过多,就容易出现这种问题。 这时候我们可以使用git reset --hard 强制回退指定分支,然后再重新合并开发。