Git -- git reset 命令的使用

573 阅读2分钟

这是我参与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命令具体做了什么,还有工作区,暂存区和本地仓库的意义。

  1. working tree: 当前的工作区域
  2. index/stage:暂存区域
  3. repository:本地仓库

比如我们在本地开发环境修改了test.js文件,这时候我们的working tree 工作区是最新代码; 当我们修改完成后,使用git add命令提交本次修改到index/stage暂存区域内,这时候暂存区域就有了我们的提交记录 接下来我们需要git commit命令提交到repository本地仓库中,这样就会有hash提交记录了。

使用

  1. git reset --soft

    将respository中的提交记录撤销,回退到git commit 前的状态。这样我们就可以重新提交commit记录了。对应在工作中的使用场景就是:

    当我们在开发分支开发了一段时间,进行了多次git add 和 git commit 命令之后。我们的git tree提交记录会有很多杂乱的内容,这时候如果合并到测试或正式分支,会有很多没有意义的提交记录,显得一点也不优雅,也不利于我们后期维护。这时候我们可以reset --soft到此次开发期间最早的一次git commit,然后重新进行git commit。这样就会只有一条commit记录,可以清晰的记录开发内容。

  2. git reset --mixed (reset默认值,即不加参数)

    将stage暂存区的内容回退到index工作区,就是将git commit 和 git add命令提交的代码都混合回退到工作区,即mixed。

  3. git reset --hard

    将所有内容回退到指定记录,包括所有未提交的修改。

    这种情况一般是在处理代码冲突的时候。当团队开发人员增多,开发分支和版本过多,就容易出现这种问题。 这时候我们可以使用git reset --hard 强制回退指定分支,然后再重新合并开发。