声明:文章原稿来源于恩师稀哥。
1. 工作原理
我们来简单说明一下git的工作原理
① 在版本库中创建文件的时候,就有了文件的第一个版本,于此同时会生成一个指针指向这个版本

② 当修改了code.txt中的内容以后,就生成了第二个版本,但是这个版本是依赖上一个版本的,在这个版本中仅仅会记录文件发生了那些修改。在有了一个新版本之后,这个指针会指向最新的版本。

③ 通过修改指针的位置可以实现回退到某个版本,表示方式有两种,一种是用^,一种使用~,如下

  • HEAD^ 或者 HEAD~1:表示上一个版本
  • HEAD^^ 或者 HEAD~2:表示上两个版本

通过上面的方式回退到第一个版本之后,指针就指向了版本1

2.基本使用

  1. 创建一个版本库,新建目录git_test,在git_test目录下创建一个版本库,命令:git init
# mkdir /git_test
# cd /git_test/
# git init
Initialized empty Git repository in /git_test/.git/
# ls -a
.  ..  .git
可以看到在git_test目录下创建了一个.git隐藏目录,这就是版本库目录。
  1. git_test目录下创建一个文件code.txt,写入一行内容如下
# echo "first line">> code.txt
# cat code.txt
first line
  1. 使用如下两条命令可以创建一个版本,创建版本需要两步:
# git add code.txt
# git commit -m 'v1'
[master (root-commit) c410627] v11 file changed, 1 insertion(+)create mode 100644 code.txt
  1. 查看版本记录,命令是git log
# git log
commit c4106273b0b87ac6f42042589663900af3617837  >>>序号
Author: root<root@localhost.localdomain>      >>>提交者
Date:   Thu Dec 27 19:54:24 2018 +0800           >>>日期v1    >>>版本
  1. 继续编辑code.txt,在里面增加一行。
# echo "second line">>code.txt
# cat code.txt
first line
second line
  1. 使用如下命令再创建一个版本并查看版本记录
# echo "second line">>code.txt
# cat code.txt
first line
second line# git add code.txt
# git commit -m 'v2 -newversion'
[master 1a3efe2] v2 -newversion1 file changed, 1 insertion(+)# git log
commit 1a3efe201b6e7fc66aa34f4ae9333a9ce2d54bb6
Author: root<root@localhost.localdomain>
Date:   Thu Dec 27 20:02:39 2018 +0800v2 -newversioncommit c4106273b0b87ac6f42042589663900af3617837
Author: root<root@localhost.localdomain>
Date:   Thu Dec 27 19:54:24 2018 +0800v1
  1. 现在如果想要回到某一个版本,可以使用如下命令:git reset --hard HEAD^

其中HEAD表示当前最新版本,HEAD^ 表示当前版本的前一个版本,HEAD^^表示当前版本的前前个版本,也可以使用HEAD~1 表示当前版本的前一个版本,HEAD~100表示当前版本的前100版本。

# git reset --hard HEAD^
HEAD is now at c410627 v1
# git log
commit c4106273b0b87ac6f42042589663900af3617837
Author: root<root@localhost.localdomain>
Date:   Thu Dec 27 19:54:24 2018 +0800v1# cat code.txt
first line
执行命令后使用git log查看版本记录,发现现在只能看到版本1的记录,cat code.txt查看文件内容,
现在只有一行,也就是第一个版本中code.txt的内容。
  1. 假如我们现在又想回到版本2,这个时候该如何操作呢?可以使用命令git reset --hard 版本号从上面第6步的操作结果看看一看到版本2的版本号为1a3efe201b6e7fc66aa34f4ae9333a9ce2d54bb6
# git reset --hard 1a3efe
HEAD is now at 1a3efe2 v2 -newversion
现在发现版本2有回来了。可以cat code.txt查看其里面的内容如下
# cat code.txt
first line
second line
  1. 假如说上面的终端已经关闭了,看不到上面的版本好了该怎么回退版本呢?

①首先执行命令将版本回退到版本1

# git reset --hard HEAD^
HEAD is now at c410627 v1
# git log
commit c4106273b0b87ac6f42042589663900af3617837
Author: root<root@localhost.localdomain>
Date:   Thu Dec 27 19:54:24 2018 +0800v1

②把当前终端关闭,然后打开新的终端,已经无法看到之前操作留下的版本2的版本号了
这里就要用到了 git reflog 命令来查看我们的操作记录

# git reflog
c410627 HEAD@{0}: reset: moving to HEAD^
1a3efe2 HEAD@{1}: reset: moving to 1a3efe
c410627 HEAD@{2}: reset: moving to HEAD^
1a3efe2 HEAD@{3}: commit: v2 -newversion
c410627 HEAD@{4}: commit (initial): v1

③可以看到版本2的版本号,在使用命令进行回滚

# git reset --hard 1a3efe2
HEAD is now at 1a3efe2 v2 -newversion

git--版本创建、回滚的原理及演练相关推荐

  1. GitHub入门:github查看项目的历史版本,并实现版本的回滚(网页版)

    原创博文,欢迎转载,转载时请务必附上博文链接,感谢您的尊重. 前言 通过本篇,你将学会在GitHub官网上,查询自己项目的[历史提交记录],还有[版本的回滚]操作. 代码实现 GitHub 版本管理和 ...

  2. git远程代码回滚_【GIT】git 删除本地分支和远程分支、本地代码回滚和远程代码库回滚...

    git branch -D br [git 删除远程分支] git push origin :br  (origin 后面有空格) git代码库回滚: 指的是将代码库某分支退回到以前的某个commit ...

  3. Git push之后回滚

    Git在push之后该怎么回滚呢?分为下面两个步骤 1.本地回退 回退到上次提交: git reset --hard HEAD^ 2.远程回退 然后强制推送当前这个版本到云端 git push ori ...

  4. 咸鱼笔记—git版本创建与回退

    咸鱼笔记-git版本创建与回退 git版本创建与回退 使用 工作区和暂存区 工作区(Working Directory) 版本库(Repository) 管理修改 撤销修改 对比文件的不同 删除文件 ...

  5. 解决SVN提交代码撤回---恢复上个版本(回滚)

    在提交代码难免回出现一些问题 想想把提交更新代码从svn上撤回来 1在提交代码的目录上打开 日志 2找到自己提交的代码版本 右击(回滚) 截图 截不到拍了张照凑合着看吧 这样就能 把提交的代码 回滚回 ...

  6. 【Git】Git 基础命令 ( 查看提交记录 git log | 版本回滚 git reset | 撤销回滚 git reflog )

    文章目录 一.查看提交记录 git log 1.查看详细提交记录 2.查看简略提交记录 二.版本回滚 git reset 1.Git 中的版本表示 HEAD~1 2.版本库代码回滚 三.撤销回滚 1. ...

  7. git 回退到上个版本 rollback 回滚 git reset HEAD, git 回退到上一版本

    git回退到上个版本 git reset --hard HEAD^ 回退到前3次提交之前,以此类推,回退到n次提交之前 git reset --hard HEAD~3 查看commit的sha码 gi ...

  8. Git 撤销操作 / 回滚历史

    撤销操作 git checkout -- <filename>,放弃文件的当前更改,回到最近一次的提交状态 git reset HEAD <filename>,取消暂存文件 g ...

  9. git 远程仓库回滚

    2019独角兽企业重金招聘Python工程师标准>>> git branch backup #创建备份分支 git push origin backup:backup #push到远 ...

最新文章

  1. nginx win 启动关闭_windows下Nginx启动、关闭、重启bat工具
  2. Web开发模式(MVC设计模式)
  3. Android之library class android.webkit.WebViewClient depends on program class android.net.http.SslErro
  4. 森近林之助【字符串处理】
  5. web前端-回调函数sort详解
  6. Python3 爬虫学习笔记 C15【代理的基本使用】
  7. 微信支付开发(全网资源) - 统计篇
  8. STC - STC15官方库函数 - 串口操作修改
  9. 苹果gamecenter未能连接服务器,win7系统GameCenter无法连接服务器的解决方法
  10. 减库存怎么处理 java_java减库存
  11. OpenHarmony社区开源代码下载及编译
  12. 末日启示:向死而生--《罗辑思维》第一季第一期
  13. 机器学习和深度学习资料
  14. myeclipse building workspace如何禁止及提高myeclipse速度
  15. java实验报告答案_Java实验报告--继承与接口
  16. Nginx的简单理解
  17. 华为机试python3题解(17题 持续更新ing)
  18. 穆迪分析在Chartis报告中被评为CLO解决方案类别领导者
  19. 光猫注册灯一直闪/光猫恢复出厂设置后没网/路由器没网【修复记录】
  20. Unity3D官方资源完全下载

热门文章

  1. 良好编程习惯的重要性
  2. Windows消息机制要点
  3. win7 右键菜单增加“在此以管理模式运行命令行”
  4. [收集]Visual C#中调用Windows API
  5. MySQL 事务到底是隔离还是不隔离?
  6. 祝贺!屠呦呦再获国际大奖!一文读懂:神药青蒿素那些我们不知道的事
  7. 为什么「道理都懂,然而执行力差」的现象如此普遍?
  8. OpenCV学习之视频读取与帧的提取、显示及保存
  9. python中numeric_Python中的Numeric
  10. 010_Spring Data JPA一对多关系