Git: 教程

Posted by Viletyy on 2018-03-08 10:32

Git

Git简介

git是一个很强大的分布式版本控制系统。它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势。

安装Git

在Linux上安装Git

1
sudo apt-get install git 

在MacOS上安装Git

1
brew install git 

在Windows上安装Git

直接在官网下载。官网下载地址

安装完毕后的配置

1
2
git config --global user.name "Your Name"
git config --global user.email "email@example.com"

用了--global参数,表示这台机器上的所有仓库都会使用这个配置,也可以去掉该参数,对当前目录下的仓库指定用户名和邮箱。

创建版本库

版本库又叫仓库,英文名是repository,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻来进行“还原”

创建版本库/仓库:

1
2
3
mkdir learngit 
cd learngit 
git init

其中mkdir命令用来创建目录,cd进入目录,git init来初始化仓库

版本库/仓库创建好了,目录下面会多出.git目录,这个目录是Git来跟踪管理版本库的。

提交修改

添加readme.txt文件,加入以下内容:

1
2
Git is a distributed version control system.
Git is free software.

使用git status可以让我们时刻掌握仓库的状态。

使用git diff {filename} 可以查看文件做了什么修改。

使用git add {filename} 可以将文件修改加入暂存区。

使用git commit -m #{comment} 将暂存区修改提交到版本库,其中comment为提交说明

版本回退

如果你不断对文件进行修改,然后不断提交修改到版本库。Git里,当我们觉得文件修改到一定程度的时候,可以“保存一个快照”,这个快照在Git中被称为commit。一旦我们把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复。

使用git log可以查看我们提交修改的历史记录,--pretty=oneline参数可以精简输出。

我们可以在历史记录中看到一个SHA1计算出来的一个非常大的数字,用十六进制表示,每一个提交一个新版本,Git就会把它们串成一条时间线,并且赋予一个唯一的版本号。

使用git reset --hard HEAD^可以回退到上一个版本

使用git reset --hard {commit_id}可以回退到指定版本,comment为版本号

使用git reflog查看你的每一次命令,可以通过该命令,获取操作前的版本号,然后回退到该版本

工作区和暂存区

工作区

就是在电脑里能看到的目录。

版本库

工作区有一个隐藏目录.git,这个就是Git的版本库

Git的版本库里存了很多东西,其中最重要的就是暂存区(state)。还有Git为我们自动创建的第一个分支master,以及指向master的一个指针HEAD

701e02bf0b2d71ab51b7e2b6aa973d52.jpeg

前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

我们修改readme.txt文件和添加LICENSE文件并且使用git add将文件添加到暂存区。暂存区的状态变成了这样。 3140921b12cc7d9a949076b2bb80d637.jpeg

然后使用git commit提交代码到版本库,版本库就成了这样。 f6ddf40f921f9953b6f84d107a11f689.jpeg

管理修改

第一次修改 -> git add -> 第二次修改 -> git commit

Git管理的是修改,当使用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

提交后,用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别