Git里的撤销修改

我们在掌握Git后,git的基础语法很容易使用,但是最让我们头疼的是Git的撤销修改,今天,我用了将近5个小时的时间,深度分析了git里各种情况下的撤销修改情景,无偿分享给大家。

如果某些方面存在遗漏或不完美的地方,欢迎留言,最好你的代码,这样咱们分析问题更加直观。

先讲一个最基础的,

git checkout -- readme.txt

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销

这里的撤销修改两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。(需要用到先git reset HEAD <file>回退,再按git checkout -- file操作

其实就一种情况:在文件没add之前,都可以直接进行checkout以实现撤销更改的目的,一旦add了,光凭上面的一句指令git checkout – readme.txt就没用了

注意:上面必须要加上 -- ,否则就是切换分支的命令。

总结:1.没有git add时,用git checkout -- file

2.已经git add时,先git reset HEAD <file>回退到1.,再按git checkout -- file操作 (注意,这两步操作缺一不可)

3.已经git commit时,用git reset commit_id 回退版本,然后再通过git checkout -- file 把文件重新找回 (注意,这两步操作缺一不可)

4.如果已经git push到远程库,想回退到某个版本,先pull下来,然后git reset --hard <commit_id>,再进行push,具体代码为:git push -f origin master

5.git reset --hard commit_id 回退到某个版本

hard的作用:

现在有很多提交,1是最新的提交,后面的次之,

1-2-3-4-5,现在head指向的是1,我现在想要指到3,那么使用git reset --hard 3,那么1,2的commit都会被丢弃,只保留3-4-5,

这个时候,你再使用git reset 1就会报错,因为1已经丢弃了。

而如果我现在用的是git reset --soft 3,那么1,2,3,4,5的commit都会被保留,此时再使用git reset 1 就会再跳转到1那个节点。

上述的操作可以多执行几遍,就明白了。大家在执行git reset --soft和git reset --hard时可以执行完后看看git log --pretty=oneline 的结果有什么变化

【不难看出:git reset --soft 还有移动指针的作用!】

6.git reflog 可以看到所有版本号

建议:大家在练习上面操作时,可以先尝试执行git log --pretty=oneline和git reflog显示出结果对照着看

该文章有word版本,可以作为笔记,方便查看,如果有需要,可以在下面下载:

https://tldx.lanzoul.com/i2P4a1i8dgre
密码:4r8v

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值