Git速成学习第一课:创建版本库与版本回退
Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/
我太困了0.0精神点再写......
/*我来啦!以后会陆续更新自己的学习笔记*/
Git是分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完
活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
- 分布式版本控制与集中式版本控制系统有什么不同呢?
和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,
随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了
- Git下载:点击此处下载安装程序 // 安装结束后还需要最后一步的设置,在命令行中输入:
git config --global user.name "your name"
git config --global user.name "your email"
注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
- Class 1 . 创建版本库
- step1.创建新的空目录
mkdir learngit
cd learngit
pwd
/users/michael/learngit
- step2.将目录变成Git可以管理的仓库
git init
Initialized empty Git repository in /Users/michael/learngit/.git/
如果你没有看到.git目录,说明这个目录被默认隐藏,使用命令ls -ah可以查看
现在我们编写一个readme.txt,内容如下。
Git is a version control system.
Git is free software.
一定要将readme.txt文本放到learngit目录下(子目录下也ok),因为这是一个git仓库。
- 第一步,用命令行告诉Git,把文件添加到仓库。
$ git add readme.txt
执行上面的命令,没有任何显示,就就是ok了。因为Unix十分哲学(大佬原话哈哈哈),没有消息就是最好的消息。
- 第二步,用命令行告诉GIt,把文件提交到仓库。
$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
- 注明:git commit命令中,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的。
- git commit 命令执行成功后会告诉你
- 1 file changed : 1个文件被改动(我们新添加的readme.txt)
- 2 insertions : 插入两行内容(readme.txt中有两行内容)
- 然后我们需要明确一下为什么Git添加文件需要add、commit两步呢?
- 因为commit可以一次提交很多文件所以你可以多次add不同的文件
git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files"
- 单元小结
- 初始化一个Git仓库,使用git init命令
- 添加文件到Git仓库,分两步:
- 使用git add <files>,注意,可以反复多次使用,添加多个文件
- 使用命令git commit -m <message>,完成
- Class 2 . 时光穿梭机
- 2.1 版本回退
现在你已经学会了修改文件,然后修改之前的readme.txt文件,然后提交到Git版本库。
Git is a distributed version control system.
Git is free software distributed under the GPL.
然后尝试提交
$ git add readme.txt
$ git commit -m "append GPL"
>>[master 1094adb] append GPL
>>1 file changed, 1 insertion(+), 1 deletion(-)
这种不断对文件进行修改,然后不断提交到版本库中,就好比存档。如果有步骤出现错误从最近的commit恢复
我们现在已有的版本有:
beta1:wrote a readme file
beta2:add distributed
beta3:append GPL
当然我们怎么能记得几千航的文件中都做了哪些更改。所以我们需要版本控制来告诉我们历史记录都有哪些。
使用git log进行查看
$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:06:15 2018 +0800 append GPL commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:03:36 2018 +0800 add distributed commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 20:59:18 2018 +0800 wrote a readme file
git log命令显示的是最近到最远的提交日志,我们从中可以看到三次更改。
如果嫌输出的信息太多,我们可以尝试加上--pretty=oneline参数
现在我们进行版本回退,准备把readme.txt回退到上一个版本,也就是add distributed的那个版本。
首先Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本用HEAD^表示,上上个版本就是HEAD^^
现在我们要做的就是把当前的版本append GPL回退到上一个版本add distributed,就可以使用git reset命令了
$ git reset --hard HEAD^
>>HEAD is now at e475afc add distributed
--hard参数的含义之后再讲。我们会看到现在的readme.txt内容已经变成上个版本的内容了。使用git log可以查看现在版本库的状态
- 但是最新的版本append GPL已经不见了该怎么办?
只要上面的命令行窗口没有关闭就可以沿着上面一直找,知道找到那个append GPL的commit id是1094adb.....
$ git reset --hard 1094a
>>HEAD is now at 83b0afe append GPL
版本号不需要写全,前几位就可以,git会自己去找。
Git的版本回退速度进行的非常快,因为Git内部有个指向当前版本的HEAD指针,当你回退版本的时候,
Git仅仅是把HEAD指针从指向append GPL改为指向add distributed,然后顺便把工作区改了。


- 如果关机想恢复到新的版本该怎么办?找不到新版本的commit id该怎么办?
在Git中,总是有后悔药可以吃的。当你用$git reset --hard HEAD^回退到add distributed版本时,
再想恢复到append GPL,就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令
$ git reflog
>>e475afc HEAD@{1}: reset: moving to HEAD^
>>1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
>>e475afc HEAD@{3}: commit: add distributed
>>eaadf4e HEAD@{4}: commit (initial): wrote a readme file
从输出可以得出,append GPL的commit id是1094adb...,现在欢迎你回到新版本
- 单元小结
HEAD指向的版本就是当前的版本,使用命令git reset --hard commit_id
git log可以查看提交历史,以确定要回退到那个版本
git reflog查看历史命令,以便要确定要回到未来那个版本
对你有帮助就支付宝请我喝可乐叭~~~

Git速成学习第一课:创建版本库与版本回退的更多相关文章
- Git速成学习第二课:管理修改与删除文件
Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 管理修改 首先我们需要明确,为什么说Git管理的是修改而不是文件呢? 我们首先对于已有的read ...
- Git速成学习第三课:创建与合并分支
本来第三课想记录一下远程仓库的创建与克隆0.0但是想了想还是不写了. 这里写一下分支管理中的创建与合并. Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng. ...
- Git速成学习第五课:分支管理策略
Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 通常合并分支时,如果可能用Fast forward模式,但是在这种模式下,删除分支后,会丢掉分支 ...
- Git速成学习第六课:Bug分支
Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 当你接到一个修复代码为101的任务的时候,很自然的你想创建一个分支issue-101来修复它,但 ...
- Git速成学习第四课:解决冲突
Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 我们继续练习,准备新的feature1分支. $ git checkout -b feature ...
- Magento学习第一课——目录结构介绍
Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...
- Elasticsearch7.X 入门学习第一课笔记----基本概念
原文:Elasticsearch7.X 入门学习第一课笔记----基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...
- Git-第二篇廖雪峰Git教程学习笔记(1)基本命令,版本回退
1.安装Git-2.16.2-64-bit.exe后,设置用户名,用户邮箱 #--global参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地 ...
- git学习——git命令之创建版本库和版本退回
原文来至 一.创建版本库 版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追 ...
随机推荐
- GET与POST方法和用curl命令执行
1.超文本传输协议 超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信,web 浏览器可能是客户端,而计算机上的网络应用程序也可能作为服务器端. HTTP的工作方式是客户机与服务器之间 ...
- bzoj1711[USACO07OPEN]吃饭Dining
题意 有F种食物和D种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一种食物和一种饮料.现在有n头牛,每头牛都有自己喜欢的食物种类列表和饮料种类列表,问最多能使几头牛同时享用到自己喜欢的食物和饮 ...
- 题解 [BZOJ1925][SDOI2010] 地精部落
题面 解析 这个似乎并不好讲啊 设\(f[i][j]\)表示有\(i\)座山, 最后一座山到达高度是\(i\)座中第\(j\)大的, 且最后一座山是山谷. 注意,\(i\)是代表有\(i\)座山,并不 ...
- 记一次 用 ssh 反向代理解决的远程操作效率问题
公司在异地有一个项目,项目在内网有一个linux 集群开发人员通过 xshell 进行操作,但是开发过程中还需要公司开发人员进行远程操作,原来采用的方案是向日葵,需求能实现但是限于网络环境向日葵实在是 ...
- 第四章 Python数据分析-描述性分析
Python基础统计 统计函数:describe() 常用的统计指标函数: 统计函数 注释 (@数据分析-jacky) size 计算 sum 求和 mean 平均值 var 方差 std 标准差
- wgs84 转百度经纬度坐标
/** * wgs84 转百度地图坐标 * @param $lng * @param $lat * @return array */ function toBaiduLocation($lng,$la ...
- 微信sdk php签名方法整理
<?php class JSSDK { private $appId; private $appSecret; public function __construct($appId, $appS ...
- JavaScript判断数据类型的4中方法
一: typeof typeof 是一种运算符,它的值有如下几种(number.boolean.string.undefined.null.function.object.symbol) consol ...
- Leetcode题目200.岛屿数量(BFS+DFS+并查集-中等)
题目描述: 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 ...
- php多线程的概念
来源:http://www.cnblogs.com/zhenbianshu/p/7978835.html 多线程 线程 首先说下线程: 线程(thread) 是操作系统能够进行运算调度的最小单位.它被 ...