Fork me on GitHub

Git速成学习第一课:创建版本库与版本回退

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查看历史命令,以便要确定要回到未来那个版本

  

对你有帮助就支付宝请我喝可乐叭~~~

posted @ 2019-10-18 08:41  鲍鲍tql  阅读(250)  评论(0编辑  收藏  举报