查这个问题的朋友一般是刚入行,所有先说几个版本控制的常用命令,如果是其他情况,大家跳过前面的常用命令介绍就行。
版本管理常用相关命令
1、使用git的时候,想要在不同版本之间转换,你就要知道版本号,git有两个命令可以帮助你查询版本号
git log
log命令会把你截至当前版本之前的,提交记录展示出来,注意重点有两个截至当前版本
和提交
,说的明白一点就是它的展示结果,只有截至到你当前所在的版本为止commit
过的版本记录,由于展示结果中最新的版本就是你当前的操作版本,而你又恰好回退了版本,那么之后的版本你是看不到的。
git reflog
reflog会把当前项目所有操作
的git记录都展示出来,想要使用这个命令并且对你自己有帮助,最好是每次git一个版本的时候都要对版本添加描述,不然你根本分不清你要操作的版本是哪个,而且该命令的结果由于是展示了所有操作记录,不止都是版本信息,还存在很多过程类日志。
2、很多时候一个项目不止有一个master主分支,还有其他分支,在不同分支之间转换需要借助下面的两个命令
git branch #查看所有分支
git branch 分支 #新增分支不切换
git checkout 分支 #切换到某个分支
git checkout -b 分支 #新增的同时切换到某个分支
3、我们最常见的一个问题,就是需要回退某个版本的代码,这常常发生在你的最新版本还没有某个历史版本写的好的时候,或者是某个历史版本存在致命Bug想要重写某些代码。这种情况就需要操作一波了。
首先你要用log或者reflog查看截至当前,你提交过的版本,并找到你需要的版本,然后使用回退命令
版本列出后,你就要开始找,但你要认识展示的信息有什么,每一条记录中开头的7位值是这个版本的版本号,该序列号全展开后很长,我们后面回退的时候可以用这7位也可以用log命令展示的那种40位左右的版本号,那个方便用那个。推荐用log,log只有各提交版本信息,好找,这里是需要给git不熟练的朋友说一下reflog展示的信息
版本号后面括号中表示的是每次新版本生成时操作者是谁以及操作的分支是那个,一般情况下多是HEAD->分支
,这些信息代表这个版本当前记录的操作,并且随着操作不同,比如插入或rebase这些操作,会生成开始和完成两条针对同一版本的记录,而HEAD是git中的一个指针,该指针用来代表该版本生成时的上一个版本,当你Push生成远程版本的时候,HEAD就会变成具体提交人。
HEAD@{数字}
是版本顺序,从当前版本开始,自0计数
顺序的后面跟的是该版本记录生成的原因和系统生成的描述,系统描述的后面跟的是我们操作git时人为赋予的描述
注意如图42de801
这个版本是个特例,当某个版本记录是生成一个新分支或者在项目刚生成git记录的时候,则该记录你可以理解为它是一条初始化记录,所以它的操作记录中描述的是initial,操作者是HEAD指针
4、当你找到了你需要回退的版本号,运行如下命令
git reset --hard 版本号
回退版本后你就可以正常的修改代码,如果当你想要再次提交的时候,我们一般用的开发工具是idea,你发现项目中Git选项没有了,你需要在settings中找到如下配置,选中灰色内容,点击加号,git就可以使用了
但你再推的时候,会提示你远程库中的版本比当前版本新,让你先pull,这个时候你在push命令中添加-f
强推就行
5、过多的提交操作会生成很多记录,不利于项目的版本管理,因此要时常考虑对不必要存在的版本记录做删除,注意git删除提交记录是一种软删除,并不是物理上直接删了,可以理解为,为了log结果方便查看和维护而做的一种隐藏设置
例如当前某项目的git log
提交记录如下
我们的目的是删除测试提交时生成的记录,此时你需要拿着该记录的上一条记录id运行如下命令
git rebase