Git的一点小进阶
版本的控制
在使用git多次提交后,会产生多次的版本,打开曾经push过的项目,在左下角的Git中可以看见提交过得版本
而在开发过程中难免遇到版本出问题而需要回退版本,首先我们要了解以下一些概念
1.版本id
版本id在文件被push后会产生一个相应的版本id
(和项目本身版本编号无关!)
有以下两种方式查看
通过Git Bash
这里以我自己的一个代码my first try为例
- 打开项目所在文件夹,右键运行Git Bash
输入git log
即可查看到不同版本的对应id
例如,*”第一次commit“*的版本id为60714……后面那一串,这一串数字事实上是通过加密id得到的,但他仍然生效
若想看见原始的id,你可以输入git reflog
,如图
每一次操作前面的7位字符就是版本id。可以看到我这里进行了很多次提交以及回滚
通过Github来看
打开Git账号,找到对应的仓库打开
点击commits
在右侧即可看见版本的id
2.版本控制的原理
事实上版本控制是由一个版本指针组成的,在每一次提交后,指针都会进行相应地更新,而版本控制的原理就是通过控制版本指针的指向来确定版本。
下面来通过实例了解版本的回滚
3.向后回滚
加入我现在在版本*“新加了文件夹啊”,但是我对他不满意,我要回到版本“写了一个6”*
通过查询,我知道版本*“写了一个6”*的id为8726583
接下来在Git bash中进行操作
输入git reset --hard id
以我的例子,我输入的是git reset --hard 8726583
!!注意此时你的本地库中的代码同样被回溯了,即你的idea中也回溯到只提交了版本*“写了一个6”*,后面的版本是无法看见的!!!!
我们能看见提示
HEAD is now at (id) message
接下来,对这个id的版本文件进行一个push操作
输入git push -f -u 本地仓库分支 远程仓库分支
-f
表示强制push
-u
表示使用默认仓库
例如,我的本地分支为try,远程分支为master
(本地分支在idea中首次push时可以自定义,默认为origin)
那么我的输入就是git push -f -u try master
和正常push一样可能会出现网络问题(习惯就好)
若连接正常,则会弹出一个验证界面,在验证界面输入账号密码授权即可
回溯成功后会看见
然后我们打开Github看看
原先
现在
我们的版本成功被回溯了!!!
4.向前回滚
在向后回滚后,相信大家也看到了问题,那就是原先的新的版本的文件和id都消失了
那么此时要如何进行想前回滚呢?
没错,回滚完我又突然觉得版本*“新加了文件夹啊”*,简直是一个超棒的版本!
此时上面提到的两种log的获取就起到了作用,在reflog
中,我们依然能找到*“新加了文件夹啊”*的id不是么
它的id为54064bd
重复向后回滚的操作指令again!
回滚又一次成功啦
总结
- 获取版本id
- 修改版本指针
- 进行push操作