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查看历史命令,以便要确定要回到未来那个版本
对你有帮助就支付宝请我喝可乐叭~~~