git远程代码回滚_git代码回滚的几种方式

这还是第一次写关于git的文章,让我不由的想起了大学那会还没有接触到git时的如噩梦般的版本控制。

每次如果代码要有大的改动都要提前copy一份出来,最后以至于有多少次大的改动就有多少分文件,而且每一个都不敢删,写到这好想配个图,虽然我不造配哪个图合适啊,反正就是类似于1,2,3,4,5...。

言归正传,我们要说的是后悔药。

在工作中我们一定都发生过这种情况,希望把代码会滚到某个节点中,git有多中代码的回滚方式,这里做一个总结。

首先我们到区分几个概念,工作区,暂存区,版本库,。

工作区

所谓工作区,即我们电脑中所看到的目录。

版本库

在工作区有一个隐藏目录.git,这是Git的版本库。

暂存区

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

下图显示了三者之间的关系,这是我们了解git的基础

图中左侧为工作区,右侧为版本库。在版本库中左侧区域是暂存区(stage),右侧标记为 "master / other" 的是 master 分支或其他分支所代表的目录树。

当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新。

当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

而我们这里所谓的后悔药就是要讲代码会滚到某个提交历史的方法,下面就针对各种不同情况一一讲解。

丢弃尚未被提交到暂存区的代码

1.git co -- file

其中 “--” 参数是必须的,否则就会变成切换分支。

2.git stash 储藏

git stash操作适用于,当你的工作进行到一半,此时还不想要提交,但是又必须切换到其他分支工作的时候。

执行命令

git stash

stash 命令就会将你此时工作区的代码存起来,待你想继续工作时,执行

git stash apply

你就可以重新应用你最后一次stash的内容了。此时的代码就回到了你上次到一半的内容上了。

已经提交到暂存区

1.git reset

git reset HEAD~1

暂存区的目录树会被重写,最后一次提交的内容会被丢弃,但是工作区不受影响。

但是加上 “--hard” 参数后,暂存区和工作目录都同步到你指定的提交。也就是HEAD~1.

git reset --hard HEAD~1

2.git rm --cached file

改命令会直接从暂存区删除文件,工作区则不做出改变。

已经提交到分支上的代码

1.git checkout HEAD . / git checkout HEAD file

当执行该命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件,替换暂存区和以及工作区中的文件。这个命令是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

2.git reset --hard

其使用方法与上面讲的git reset一样,都是改变了暂存区的HEAD索引。

已经提交到远程的代码

1.git revert

git revert HEAD 撤销前一次 commit

git revert HEAD^ 撤销前前一次 commit

git revert fa042ce57 撤销指定的版本,撤销也会作为一次提交进行保存。

与reset不同的是:

revert不会舍弃原来的提交记录,而是生成了一次新的提交。

reset是撤回到某个指定的版本,而revert则是将某个指定的版本撤销,也就是撤回到指定版本之前的一个版本上。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值