git恢复指定commit,使用git reset指令

git恢复指定commit,使用git reset指令

  • git一共有三个区域,HEAD(记录点指针),INDEX(修改暂存区),Working目录(电脑文件)

  • 前提操作

  • 假设我们创建一个新的文件夹使用命令git init,在其中创建了一个文件a.txt,先写入

    •   Hello
      
    • 告诉自己这是版本1,执行git add .,INDEX <- Working目录中的内容(表示INDEX中的内容变为了Working目录中的内容)
    • 再执行git commit -m "commit 1",INDEX中的内容会成为第一个commit结点,HEAD指针放在了该结点处。
  • 我们再对文件a.txt进行修改,变成版本2

    •   Hello
        Hello1
      
    • 执行git add .,INDEX <- Working目录中的内容(表示INDEX中的内容变为了Working目录中的内容)
    • 再执行git commit -m "commit 2",INDEX中的内容会成为第二个commit结点,HEAD指针移动到了该结点。
  • 那么,现在再次对文件a.txt进行修改,变成版本3

    •   Hello
        Hello1
        Hello2
      
    • 这时候,Working目录中的内容 != INDEX = HEAD
  • 接下来问题来了,我们对于当前的改动不满意,想退回到以前的commit点。该如何实现?使用git reset函数即可。但我们可能有三种需求。

  • 需求1:感觉版本3有问题,想先看看现在的版本3与之前的版本1有什么不同(版本1是否是无问题的版本),再决定将Working中的内容还原成版本1

    • 我们要做的是:将HEAD指向第一个commit结点,让INDEX = HEAD,但是Working中的内容不变。
    • 使用git reset --mixed HEAD~1,在下图中可以就进行对比。【–mixed为默认】
  • 需求2:心里有数,直接想将Working中的内容退回到版本1,也不用看

    • 我们要做的是:将HEAD指向第一个commit结点,让INDEX = HEAD = Working。
    • 使用git reset --hard HEAD~1
  • 需求3:将Working中的修改使用git add .添加入INDEX,在INDEX与Working和HEAD都不同的情况下,我们希望将HEAD移动到第一个commit,也不想破坏INDEX中的内容。

    • 我们要做的只有:将HEAD指向第一个commit结点
    • 使用git reset --soft HEAD~1
    • 在VSCode中,Changes目录下为Working和INDEX的不同,Staged Changes目录下为INDEX和HEAD的不同。
  • 参考:https://davidzych.com/difference-between-git-reset-soft-mixed-and-hard/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值