Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/

我太困了0.0精神点再写......

/*我来啦!以后会陆续更新自己的学习笔记*/

  Git是分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完

活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

  • 分布式版本控制与集中式版本控制系统有什么不同呢?

  和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,

  随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了

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 GPLcommit 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速成学习第一课:创建版本库与版本回退的更多相关文章

  1. Git速成学习第二课:管理修改与删除文件

    Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 管理修改 首先我们需要明确,为什么说Git管理的是修改而不是文件呢? 我们首先对于已有的read ...

  2. Git速成学习第三课:创建与合并分支

    本来第三课想记录一下远程仓库的创建与克隆0.0但是想了想还是不写了. 这里写一下分支管理中的创建与合并. Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng. ...

  3. Git速成学习第五课:分支管理策略

    Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 通常合并分支时,如果可能用Fast forward模式,但是在这种模式下,删除分支后,会丢掉分支 ...

  4. Git速成学习第六课:Bug分支

    Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 当你接到一个修复代码为101的任务的时候,很自然的你想创建一个分支issue-101来修复它,但 ...

  5. Git速成学习第四课:解决冲突

    Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 我们继续练习,准备新的feature1分支. $ git checkout -b feature ...

  6. Magento学习第一课——目录结构介绍

    Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...

  7. Elasticsearch7.X 入门学习第一课笔记----基本概念

    原文:Elasticsearch7.X 入门学习第一课笔记----基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...

  8. Git-第二篇廖雪峰Git教程学习笔记(1)基本命令,版本回退

    1.安装Git-2.16.2-64-bit.exe后,设置用户名,用户邮箱 #--global参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地 ...

  9. git学习——git命令之创建版本库和版本退回

    原文来至 一.创建版本库 版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追 ...

随机推荐

  1. Elasticsearch: Index template

    Index template定义在创建新index时可以自动应用的settings和mappings. Elasticsearch根据与index名称匹配的index模式将模板应用于新索引.这个对于我 ...

  2. 02_pip区别: linux环境下python2,python3的

    1.pip与pip3理解 centos中,我的pip与pip3都是python2.7的,所以无法安装成功,总是安装成python2的 [root@IP ~]# pip -V pip /site-pac ...

  3. ubuntu16.04卡死的解决办法

    1.输入命令:top 找到chrome所占用的线程的pid. 2.kill pid

  4. CMake编译OpenCV

    使用CMake来编译OpenCV,以匹配自己使用的VS版本. 主要有两步: CMake编译OpenCV源码得到OpenCV.sln工程文件. VS编译OpenCV.sln. 以最新的cmake-3.1 ...

  5. luogu3629

    P3629 [APIO2010]巡逻 题目描述 在一个地区中有 n 个村庄,编号为 1, 2, ..., n.有 n – 1 条道路连接着这些村 庄,每条道路刚好连接两个村庄,从任何一个村庄,都可以通 ...

  6. HTML5 烟花系统

    需求:在一个虚拟烟花球中,在不同的部位填充不同颜色.质地的烟花火药:观看试放效果.最好能结合点物理学定律(以便展现火药粉被爆炸扩散到一定程度再爆炸的效果) 这是这学期的一个作业,感觉挺无聊的,纯粹是老 ...

  7. Python 文件writelines() 方法和处理双层列表

    概述 writelines() 方法用于向文件中写入一序列的字符串. 这一序列字符串可以是由迭代对象产生的,如一个字符串列表. 换行需要制定换行符 \n. 语法 writelines() 方法语法如下 ...

  8. Flutter移动电商实战 --(4)打通底部导航栏

    关于界面切换以及底栏的实现可参考之前写的一篇文章:Flutter实 ViewPager.bottomNavigationBar界面切换 1.新建4个基本dart文件 在pages目录下,我们新建下面四 ...

  9. Spring数据分析思维课

    本文目录 一.杂 二.四大行业数据分析 1.工具 1.电商数据分析——以京东为例 2.sql常见问题   2.互联网金融——以芝麻信用为例 3.数据异常排查 3.游戏行业——以欢乐斗地主为例 4.融入 ...

  10. CI框架对HTML输入的处理/CI框架引用ueditor时对提交内容的默认处理

    项目里近期用到了富文本编辑器,可是写入数据的时候总是写入, <p xss="removed">内容</p> 所有的样式都会被改写成这样,xss=" ...