在上篇文章中,我们就说过Git与GitHub不是一回事。GitHub是基于Git的,Git是基础。所以再学习更多的GitHub知识之前,就得先了解Git。
Git 是一款免费、开源的分布式版本控制系统,他是著名的 Linux 发明者 Linus Torvalds 开发的。Git也是目前世界上最先进的分布式版本控制系统。
(这段话引自这里,我也很好的学习了)
我用的是windows系统, 从这里下载:https://git-for-windows.github.io/
安装完成后,查看你的git是否安装成功,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,然后在命令行里面输入git,出现如下提示证明安装成功。
安装完成后,还需要设置一番,在命令号输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
注意:git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
命令行操作是全集,图形操作都是命令行的一个子集
版本库有名仓库(repository),简单理解成为一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以还原。
创建版本库的方式:选择一个合适的地方,创建一个空目录。。
我在我的E盘创建了一个文件件learngit,然后打开文件夹,右击,点击Git Bash Here
进入命令窗口。输入 git init 命令将这个目录变成Git可以管理的仓库,即初始化一些与仓库相关的内容。
我们发现这个文件夹git是隐藏的。打开git文件我们发现会有
2.配置
学习一款工具的时候,首先应该认识它的配置。运行以下命令可以查看git的配置,输入命令git config –list
Git的配置是有三份配置文件合成的,分别是本地配置:配置文件保存在当前仓库中;全局配置:配置保存在当前windows登录用户的根目录下;系统配置:配置文件保存在git的安装目录下的某个目录中。当有相同配置时,本地配置的优先级较高,全局配置次之,系统配置优先级最低。
本地配置就在git文件中的config文件中,你可以 打开查看一下
你也可以对配置进行增加、修改、删除、查看,基本上都可以用命令实现。
查看本地配置、全局配置、系统配置的命令如下:
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会把文件的变化列出来,例如未跟踪的文件,已修改的文件,已删除的文件等,将会被提交的文件列表等。良好的习惯是在操作之前先查看一下状态。
7.提交
提交就是指把暂存区的文件提交到git仓库,可以通过以下命令进行
git commit –m “提交说明” (这个说明最好是有意义的,这样你就能从历史记录中方便找到改动的记录)
git commit命令执行成功后告诉你,1个文件被改动(我们新添加的README.md文件)插入了3行内容(README.md中有3行内容)
提交同时也是一个名词,在git中一个提交就是一个历史,每个提交都有一个唯一的提交id。
注意: 添加文件到Git仓库,分两步
第一步,使用命令git add file,注意 可反复使用多次,添加多个文件
第二步,使用git commit,完成
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 status命令让我们时刻掌握仓库当前的状态,上面告诉我们,README.md被修改过了,但是没有提交修改。
如果想查看具体修改了什么内容,用命令git diff
从上面的命令我们知道,我们first修改成了second, 第二行中我们加入了“distribute”。
知道了对README.md做了什么修改后,再提交。提交步骤是一样的
10. 检出文件(版本回退)
检出文件时指从提交中拿出一个文件到工作区,例如当想放弃某个文件的修改时,就可以这样做 git checkout 文件名
演示: 我们再次修改README.md文件
third:
Git is a distributed version control system
Git is free software distributed under the GPL
然后提交。
像这样,不断对文件进行修改,然后不断提交修改到版本库。一旦把文件改乱了,或者误删了文件,还可以从最近的commit恢复,然后继续工作,而不是从头开始。
现在看看README.md文件一共有几个版本被修改提交到Git仓库里
如果嫌弃信息太多,不妨这样,加一个 –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
如果你再想回到第三次提交的版本的时候,只要你记得第三次commit id就好了,
若你忘记了第三次的commit id也不用慌,用命令git reflog,记录你的每一次命令。
现在接着讲讲 工作区和暂存区
工作区(Working Directory)
就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区:
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
分支和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命令也可以.
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
third:
Git is a distributed version control system
Git is free software distributed under the GPL
这是我要撤销修改的一句话。
工作区变成了
third:
Git is a distributed version control system
Git is free software distributed under the GPL
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
13. 删除文件
命令git rm用于删除一个文件。
实验:添加一个delete.txt到Git
用git rm删除掉,并且git commit。文件果然被删除了。
好了,Git暂时说到这里。