一、版本回退
1、历史回退(版本回退)——命令行git reset --hard 版本编号
- 注意:当前命令会让
工作区
的内容发生改变,可以理解成历史区(master分支)
直接回到工作区
- 比如:从
版本4
回到版本3
,则工作区
只会显示版本3
的代码内容
1.1、指令解释
// 回退到上一次提交的版本 => 在Head(当前指针指向的位置)后添加一个^
$ git reset --hard HEAD^
// 回退到上上次提交的版本 => 在Head后添加两个^,依此类推
$ git reset --hard HEAD^^
// 这里的~2 等于 ^^写法,比较简洁
$ git reset --hard HEAD~2
// 后面还可以接"标识符"回到任意版本 => "标识符"来自提交版本时,生成的编号的前6位,可以通过`git log`查看
$ git reset --hard 7016321
1.2、图示说明
1.3、业务带入
- 创建4次提交版本记录——此时
HEAD指针
指向第4次的版本记录
- 回退到第三次的
版本记录
- 查看
版本记录
2、查看本地库所有的操作记录——命令行git reflog
- 查看所有的
本地库
的操作记录
- 找到对应
版本号
的标识符
- 回退到想回退的
版本记录
——从版本3回到版本4
- 查看
工作台
3、历史回退(不修改工作区内容)——命令行git reset --soft
注意
:当前命令不会让工作区
的内容消失,可以理解成版本回退到暂存区
比如
:从版本5
回到版本3
,工作区的代码不会消失作用
:
- 当版本注释写错时,可以选择这种回退方式,让代码放在暂存区后,再次重新提交到历史区,此时,可以重新补充版本注释内容
- 当版本提交后,发现有bug需要修复时,可以通过这种方式,将提交后的代码撤回到暂存区,等修复bug后,再次将代码提交到暂存区,此时,之前退回来的代码会和这次修复后的代码进行合并,最后,将两份合并后的代码再一起提交到历史区,这样提交记录会很清晰
- 注意:如果此时有,第二个页面功能已经开始写了,需要先提交当前需要修复的内容,不要再用全部上传了!
回退一个版本
——从版本5回到版本3
- 查看工作区 ——代码还在,可以理解回退到
暂存区
了
- 查看
版本记录
——记录已经没了
4、git revert与git reset的区别
4.1、图解
4.2、注意
// 1、注意:这里可以不加 --hard
$ git revert HEAD
// 2、注意:和reset不同,revert这里的HEAD和reset差了一个版本,也就是:revert HEAD是回到上一个版本,revert HEAD^是回到上上个版本
4.3、业务带入
- 输入
命令行
回退到上个版本
- 进入当前页面,输入
i
进行注释编辑,再输入esc
退出,最后输入:wq
回车
- 查看
版本记录
——新增了一条记录信息
- 查看
工作区
变化——代码内容已经回退成功了
4.4、对比解释
git reset
:- 回滚到对应的
commit-id(提交记录)
- 相当于是:删除了
commit-id
以后的所有的提交,并且不会产生新的commit-id记录
- 如果要推送到
远程服务器
的话,reset
这种回退方式会比较危险,因为需要强制推送-f
,有可能覆盖团队内别人的代码,此时,比较建议使用git reset --soft
这种回退方式再次提交
- 回滚到对应的
git revert
:- 用来撤销某个特定提交的更改,但它不会直接修改或删除之前的提交记录。
- 它会新建一个提交,把之前那个提交的改动“反向操作”一下
- 比如:如果之前的提交是添加了某些代码,
revert
会新建一个提交
来删除这些代码
- 比如:如果之前的提交是添加了某些代码,
- 如果要推送到
远程服务器
的话,就是普通的操作git push
就好了
二、版本回退
1、初识分支
解释
:- git分支就是:我们把
整个文件夹
分成一个个独立的区域
,比如:- 在开发登录功能时,可以放在login分支下进行开发;
- 开发列表功能时,可以放在list分支下进行开发;
- 大家互不干扰,
每个功能
都是一个独立的功能分支
,开发完成后,再合并到主分支中,分支没有用的时候,也可以删掉,这样开发就会好很多
- git在
初始化时
,会自动生成master主分支
,同时,我们也可以自己开辟出独立分支
- git分支就是:我们把
作用
:- 在应对
团队协作
中,测试功能时不阻塞其它功能的开发进程 - 在
单兵作战
中,方便修复bug,不影响其它功能的正常开发
- 在应对
解释
:
2、创建分支
- 创建分支使用——
git branch 分支名称
指令
- 查看
当前分支
情况——git branch
指令- 可以看到,当前有两个分支:一个是master,一个是list
- 前面带有* 号,且有高亮显示的分支,表示:当前所处的分支
3、切换分支
解释
:- 对列表功能的开发要移动到list分支去完成,所以需要使用git checkout 分支名称进行切换
- 注意:切换分支之前,一定要将当前分支的内容提交!否则在别的分支上会出现当前分支代码,这不对!
命令行:
:
// 切换到 list 分支
$ git checkout list
后续
:- 后续在该分支上进行列表功能的开发,开发完成后,在当前分支上进行提交,提交后我们再进行分支切换
- 发现master上还是最初始的状态,而list分支上有我们新写的列表功能的代码,此时按照分支把所有功能都开发完毕后,把所有代码都合并到master主分支上就可以了
图示
:
4、合并分支
解释
:- git中的合并分支,只能是:把别的分支内容合并到自己的分支上
- 使用的指令是:
git merge
// 切换到 master 分支
$ git checkout master
// 把 list 的内容合并到自己的分支
$ git merge list
后续
:- 这时,刚才在list分支上开发的内容,就都来到了master主分支上
- 如果有多个分支的话,那么所有的最后分支都合并到master分支上时,我们的主分支上就有完整网站的所有页面,各个分支上都是单独的页面和功能
图解
:
5、删除分支
解释
: 此时开辟的list分支
就没有什么用了,也就可以删除分支
了步骤及命令行
:- 先切换到别的分支
- 使用指令
git branch -d 分支名称
进行删除
// 先切换到别的分支
$ git checkout master
// 删除 list 分支 => -d的意思是delete的缩写
$ git branch -d list
图解