107 lines
4.9 KiB
Markdown
107 lines
4.9 KiB
Markdown
---
|
||
layout: post
|
||
title: "Git: 教程"
|
||
date: 2018-03-08 10:32:00
|
||
author: "Viletyy"
|
||
header-style: text
|
||
tags:
|
||
- Git
|
||
- Shell
|
||
---
|
||
|
||
## Git
|
||
### Git简介
|
||
git是一个很强大的分布式版本控制系统。它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势。
|
||
|
||
### 安装Git
|
||
#### 在Linux上安装Git
|
||
```shell
|
||
sudo apt-get install git
|
||
```
|
||
#### 在MacOS上安装Git
|
||
```shell
|
||
brew install git
|
||
```
|
||
#### 在Windows上安装Git
|
||
直接在官网下载。官网[下载地址](https://git-scm.com/downloads)
|
||
#### 安装完毕后的配置
|
||
```shell
|
||
git config --global user.name "Your Name"
|
||
git config --global user.email "email@example.com"
|
||
```
|
||
用了`--global`参数,表示这台机器上的所有仓库都会使用这个配置,也可以去掉该参数,对当前目录下的仓库指定用户名和邮箱。
|
||
|
||
### 创建版本库
|
||
版本库又叫仓库,英文名是repository,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻来进行“还原”
|
||
|
||
创建版本库/仓库:
|
||
```shell
|
||
mkdir learngit
|
||
cd learngit
|
||
git init
|
||
```
|
||
其中`mkdir`命令用来创建目录,`cd`进入目录,`git init`来初始化仓库
|
||
|
||
版本库/仓库创建好了,目录下面会多出.git目录,这个目录是Git来跟踪管理版本库的。
|
||
|
||
### 提交修改
|
||
添加readme.txt文件,加入以下内容:
|
||
```
|
||
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`
|
||
|
||

|
||
|
||
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
|
||
|
||
第一步是用`git add`把文件添加进去,实际上就是把文件修改添加到暂存区;
|
||
|
||
第二步是用`git commit`提交更改,实际上就是把暂存区的所有内容提交到当前分支。
|
||
|
||
因为我们创建Git版本库时,Git自动为我们创建了唯一一个`master`分支,所以,现在,`git commit`就是往`master`分支上提交更改。
|
||
|
||
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
|
||
|
||
我们修改readme.txt文件和添加LICENSE文件并且使用`git add`将文件添加到暂存区。暂存区的状态变成了这样。
|
||

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

|
||
|
||
### 管理修改
|
||
第一次修改 -> git add -> 第二次修改 -> git commit
|
||
|
||
Git管理的是修改,当使用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。
|
||
|
||
提交后,用`git diff HEAD -- readme.txt`命令可以查看工作区和版本库里面最新版本的区别
|
||
|