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
  • 1
  • 2
  • 3
  • 4

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

 (F)
A-B
  ↑
master
  • 1
  • 2
  • 3
  • 4

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

2.git reset --soft

同样是这个状态:

   (F)
A-B-C
    ↑
  master
  • 1
  • 2
  • 3
  • 4

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

 (F)
A-B-C
  ↑
master
  • 1
  • 2
  • 3
  • 4

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

3.git reset --mixed

还是这个场景:

   (F)
A-B-C
    ↑
  master
  • 1
  • 2
  • 3
  • 4

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

   (F)
A-B-C
  ↑
master
  • 1
  • 2
  • 3
  • 4

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

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

posted on   努力做一个伪程序员  阅读(385)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示