Git&GitHub学习笔记之(二)Git命令操作

在上篇文章中,我们就说过Git与GitHub不是一回事。GitHub是基于Git的,Git是基础。所以再学习更多的GitHub知识之前,就得先了解Git。

一、什么是Git

Git 是一款免费、开源的分布式版本控制系统,他是著名的 Linux 发明者 Linus Torvalds 开发的。Git也是目前世界上最先进的分布式版本控制系统。

  1. Git的特点

(这段话引自这里,我也很好的学习了)

  • 分布式 : Git版本控制系统是一个分布式的系统, 是用来保存工程源代码历史状态的命令行工具;
  • 保存点 : Git的保存点可以追踪源码中的文件, 并能得到某一个时间点上的整个工程项目额状态; 可以在该保存点将多人提交的源码合并,也可以会退到某一个保存点上;
  • Git离线操作性 :Git可以离线进行代码提交, 因此它称得上是完全的分布式处理, Git所有的操作不需要在线进行; 这意味着Git的速度要比SVN等工具快得多, 因为SVN等工具需要在线时才能操作, 如果网络环境不好, 提交代码会变得非常缓慢;
  • Git基于快照 : SVN等老式版本控制工具是将提交点保存成补丁文件, Git提交是将提交点指向提交时的项目快照,
    提交的东西包含一些元数据(作者, 日期, GPG等);
  • Git的分支和合并 : 分支模型是Git最显著的特点, 因为这改变了开发者的开发模式,
    SVN等版本控制工具将每个分支都要放在不同的目录中, Git可以在同一个目录中切换不同的分支;
  • 分支即时性 : 创建和切换分支几乎是同时进行的, 用户可以上传一部分分支, 另外一部分分支可以隐藏在本地,不必将所有的分支都上传到GitHub中去;
  • 分支灵活性 : 用户可以随时 创建 合并 删除分支, 多人实现不同的功能, 可以创建多个分支进行开发, 之后进行分支合并,这种方式使开发变得快速, 简单, 安全;
    说到版本控制系统,大家应该听说过 SVN ,SVN是集中式版本控制系统,算是过去式了;而Git 是新时代的产物,是分布式版本控制系统。那么集中式与分布式有什么区别呢?我用廖大神的话,给大家展示一下 (这些算是我站在巨人的头顶上,给大家说明一下!)
    2.集中式vs 分布式
    集中式版本控制系统,版本库是集中存放在中央服务器的,,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
    缺点:集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。
    分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
    和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
    好了,正式开启我的学习之路了。

二、 Git安装

我用的是windows系统, 从这里下载:https://git-for-windows.github.io/
安装完成后,查看你的git是否安装成功,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,然后在命令行里面输入git,出现如下提示证明安装成功。
Git&GitHub学习笔记之(二)Git命令操作_第1张图片
安装完成后,还需要设置一番,在命令号输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
注意:git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

三、Git的具体命令

命令行操作是全集,图形操作都是命令行的一个子集

  1. git创建版本库

版本库有名仓库(repository),简单理解成为一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以还原。
创建版本库的方式:选择一个合适的地方,创建一个空目录。。
我在我的E盘创建了一个文件件learngit,然后打开文件夹,右击,点击Git Bash Here
Git&GitHub学习笔记之(二)Git命令操作_第2张图片
进入命令窗口。输入 git init 命令将这个目录变成Git可以管理的仓库,即初始化一些与仓库相关的内容。
我们发现这个文件夹git是隐藏的。打开git文件我们发现会有
Git&GitHub学习笔记之(二)Git命令操作_第3张图片

2.配置

学习一款工具的时候,首先应该认识它的配置。运行以下命令可以查看git的配置,输入命令git config –list
Git&GitHub学习笔记之(二)Git命令操作_第4张图片
Git的配置是有三份配置文件合成的,分别是本地配置:配置文件保存在当前仓库中;全局配置:配置保存在当前windows登录用户的根目录下;系统配置:配置文件保存在git的安装目录下的某个目录中。当有相同配置时,本地配置的优先级较高,全局配置次之,系统配置优先级最低。
本地配置就在git文件中的config文件中,你可以 打开查看一下
Git&GitHub学习笔记之(二)Git命令操作_第5张图片
你也可以对配置进行增加、修改、删除、查看,基本上都可以用命令实现。
查看本地配置、全局配置、系统配置的命令如下:

git config --local --list
git config --global --list
git config --system --list

修改配置的命令如下:

git config --local 配置项 “配置值”  如git config – local core.bare true
git config --global 配置项 “配置值”
 git config --system配置项 “配置值”

删除配置

git config –local –unset core.bare

3.. 查看帮助
git 查看帮助很简单,git config –h或者git config –help
注意 两个(–)要写选项的全称 一个(-)可以选项的简称
有的选项有简称,有的没有。但是一定有全称。
4.. 工作区、暂存区 、仓库
工作区是指当前编辑代码的文件夹,也是.git仓库所在的文件夹;
暂存区只是一个概念,实际上并不存在;
仓库就是.git文件夹了,它是我们运行 git init命令时自动创建的,默认是隐藏的,所有的历史都保存在这里。(这个地方稍后我们结合实际操作说一下)
5. 把文件添加到版本库
编写一个README.md文件,内容如下

first: 
Git is a version control system
Git is free software

这个文件一定要放到learngit目录下(子目录也可以),因为这个Git的一个仓库,放到其他地方Git会找不到这个文件。
跟踪文件
初始化一个仓库时,仓库是空空的,要运行以下命令,让git跟踪某文件
git add 文件名
运行以上命令就把一个文件跟踪起来,这个文件就进入了暂存区。要注意的是.git不会跟踪一个空文件夹

用命令 git add告诉Git,把文件添加到仓库中 git add README.md
6.查看状态:
查看命令用的很频繁,命令如下 git status
Git&GitHub学习笔记之(二)Git命令操作_第6张图片
git会把文件的变化列出来,例如未跟踪的文件,已修改的文件,已删除的文件等,将会被提交的文件列表等。良好的习惯是在操作之前先查看一下状态。
7.提交
提交就是指把暂存区的文件提交到git仓库,可以通过以下命令进行
git commit –m “提交说明” (这个说明最好是有意义的,这样你就能从历史记录中方便找到改动的记录)
git commit命令执行成功后告诉你,1个文件被改动(我们新添加的README.md文件)插入了3行内容(README.md中有3行内容)
提交同时也是一个名词,在git中一个提交就是一个历史,每个提交都有一个唯一的提交id。
Git&GitHub学习笔记之(二)Git命令操作_第7张图片
注意: 添加文件到Git仓库,分两步
第一步,使用命令git add file,注意 可反复使用多次,添加多个文件
第二步,使用git commit,完成
8.. 查看日志
查看日志是指查看提交的记录,,可以运行如下命令
Git&GitHub学习笔记之(二)Git命令操作_第8张图片
git log 还可以显示的简洁一点,加上—oneline选项
git log –oneline 单行显示模式下的 提交id也变短了,注意这个提交id 也是可以进行某些操作的,和长长的提交id具有相同的功能。
9.查看不同提交记录
我们已经成功地添加并提交了一个README.md文件,现在我们继续工作,修改了README.md文件,内容改成如下

second: 
Git is a distributed version control system
Git is free software

,现在运行 git status
Git&GitHub学习笔记之(二)Git命令操作_第9张图片
git status命令让我们时刻掌握仓库当前的状态,上面告诉我们,README.md被修改过了,但是没有提交修改。
如果想查看具体修改了什么内容,用命令git diff
Git&GitHub学习笔记之(二)Git命令操作_第10张图片
从上面的命令我们知道,我们first修改成了second, 第二行中我们加入了“distribute”。
知道了对README.md做了什么修改后,再提交。提交步骤是一样的
Git&GitHub学习笔记之(二)Git命令操作_第11张图片
10. 检出文件(版本回退)
检出文件时指从提交中拿出一个文件到工作区,例如当想放弃某个文件的修改时,就可以这样做 git checkout 文件名
演示: 我们再次修改README.md文件

third: 
Git is a distributed version control system
Git is free software distributed under the GPL

然后提交。
Git&GitHub学习笔记之(二)Git命令操作_第12张图片
像这样,不断对文件进行修改,然后不断提交修改到版本库。一旦把文件改乱了,或者误删了文件,还可以从最近的commit恢复,然后继续工作,而不是从头开始。
现在看看README.md文件一共有几个版本被修改提交到Git仓库里
Git&GitHub学习笔记之(二)Git命令操作_第13张图片
如果嫌弃信息太多,不妨这样,加一个 –pretty=oneline
这里写图片描述
如果想把README.md回退到以前的版本,怎么做?
首先,Git必须了解当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本是HEAD^,上上一个版本HEAD^^,当然往上100个版本,写成HEAD~100.
回退到上一个版本,使用命令git reset
这里写图片描述
查看README.md的内容,果然是

second: 
Git is a distributed version control system
Git is free software

Git&GitHub学习笔记之(二)Git命令操作_第14张图片
如果你再想回到第三次提交的版本的时候,只要你记得第三次commit id就好了,
这里写图片描述
若你忘记了第三次的commit id也不用慌,用命令git reflog,记录你的每一次命令。
Git&GitHub学习笔记之(二)Git命令操作_第15张图片
现在接着讲讲 工作区和暂存区

工作区(Working Directory)
就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区:
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
Git&GitHub学习笔记之(二)Git命令操作_第16张图片
分支和HEAD的概念我们以后再讲。
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
11. 管理和修改
每次修改,如果不add到暂存区,那就不会到commit中。
12. 撤销修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。
我在README.md中添加了一行
third:
Git is a distributed version control system
Git is free software distributed under the GPL
这句话是我要撤销的。
其中上句话你是可以手动删除的,但是用Git命令也可以.
Git&GitHub学习笔记之(二)Git命令操作_第17张图片
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
third:
Git is a distributed version control system
Git is free software distributed under the GPL
这是我要撤销修改的一句话。
Git&GitHub学习笔记之(二)Git命令操作_第18张图片
工作区变成了

third: 
Git is a distributed version control system
Git is free software distributed under the GPL

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
13. 删除文件
命令git rm用于删除一个文件。
实验:添加一个delete.txt到Git
Git&GitHub学习笔记之(二)Git命令操作_第19张图片
用git rm删除掉,并且git commit。文件果然被删除了。
Git&GitHub学习笔记之(二)Git命令操作_第20张图片

好了,Git暂时说到这里。

你可能感兴趣的:(Git&GitHub学习笔记)