关于 git reset 命令几个常用参数的理解

我们在使用git进行版本管理的时候,如果遇到需要回退代码的情况,一般会用 git reset 命令,不过这个命令还有几个参数,这篇文章就来详解一下。

先来了解一下 git 大致的工作流程,配合这张图会比较容易讲清楚

git_reset

首先,想象一下,我正在写着我的代码,这个状态对应图中的 Working diretory
这个时候,我的代码还就是我的,跟 git 半毛钱关系都没有。(在Android Studio中对应文件颜色是红色)

然后,我把当前编辑的 A 文件 add 到 git 中,这个时候就跟 git 发生了关系,git 接受了我的代码,然后把这个文件存入了自己的暂存区,后面我对这个文件的更改 ,git 都会知晓。这个状态对应图中的 Stage/Index(在Android Studio中对应文件颜色是绿色或者蓝色)

我把写好的 A 文件 commit 到 git ,这就有了一次提交历史。对应图中的 History,在 git 中只要 commit 过的文件,都有各种方式可以恢复,基本来说,就是不会丢了(在Android Studio中对应文件颜色是白色)

好的,那么现在,我发现代码写的不好,需要回退到上一次的提交,我有几个命令可以选择。

常见以下三个命令:

git reset --hard

git reset --soft

git reset --mixed

1.git reset --hard

这个命令 非常危险 ,是 git 中少有的几个会丢失信息的操作。它会把回退点之前的所有信息都删掉,一个不留,干干净净。
举个例子:
现在我把 A 文件修改了两次,到了 C 状态 ,并且已提交。
那么我的分支指针是指向 C , 当前文件编辑的状态也是在 C

   (F)
A-B-C
    ↑
  master

我输入了git reset --hard,结果会变成:

 (F)
A-B
  ↑
master

对的, C 状态彻底没有,再也找不回来。所以,没事不要用这个命令。

2.git reset --soft

同样是这个状态:

   (F)
A-B-C
    ↑
  master

我输入了git reset --soft,结果是:

 (F)
A-B-C
  ↑
master

文件状态与分支的指针都指向上一个提交,C 还是在的,只是没显示。

3.git reset --mixed

还是这个场景:

   (F)
A-B-C
    ↑
  master

我输入了 git reset --mixed,结果是:

   (F)
A-B-C
  ↑
master

分支指针指向上次提交点,但是文件状态还是在当前文件 C ,我看到的现象就是 C 文件还在,但是没有 add ,是红色的。
可以看出,三个命令中 mixed 是最好的回退处理方式,其实这也是 git reset 的默认参数。

好了,本篇到此结束,可能还会更新。
如果有错的地方,还请留言。

结尾附赠一个比较好的 Git 学习网址,中英文都有哦!!
ProGit

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
git reset命令Git版本控制系统中的一个命令,用于将当前分支的HEAD指针移动到指定的提交,并且可以选择性地更新索引和工作区的内容。它的主要参数有三种模式:soft、mixed和hard,它们决定了reset命令对索引和工作区的影响。 1. soft模式:在soft模式下,reset命令只会移动HEAD指针到指定的提交,不会修改索引和工作区的内容。这意味着你可以重新提交之前的更改,而不会丢失这些更改。 2. mixed模式:在mixed模式下,reset命令会移动HEAD指针到指定的提交,并且会将索引重置为该提交的状态,但不会修改工作区的内容。这意味着你可以重新提交之前的更改,但是需要重新添加这些更改到索引中。 3. hard模式:在hard模式下,reset命令会移动HEAD指针到指定的提交,并且会将索引和工作区都重置为该提交的状态。这意味着你会丢失之前的更改,所以在使用hard模式时要谨慎操作。 下面是几个示例演示了git reset命令的使用: 1. 使用soft模式移动HEAD指针到指定的提交,不修改索引和工作区的内容: ```shell git reset --soft <commitid> ``` 2. 使用mixed模式移动HEAD指针到指定的提交,并将索引重置为该提交的状态: ```shell git reset --mixed <commitid> ``` 3. 使用hard模式移动HEAD指针到指定的提交,并将索引和工作区都重置为该提交的状态: ```shell git reset --hard <commitid> ``` 请注意,<commitid>是指你要移动到的目标提交的ID或引用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值