gitstats/_posts/2018-03-08-git-usage.md

107 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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`
![701e02bf0b2d71ab51b7e2b6aa973d52.jpeg](evernotecid://AC84C433-9407-403E-89A8-42F56C323EC9/appyinxiangcom/25115422/ENNote/p38?hash=701e02bf0b2d71ab51b7e2b6aa973d52)
前面讲了我们把文件往Git版本库里添加的时候是分两步执行的
第一步是用`git add`把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用`git commit`提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时Git自动为我们创建了唯一一个`master`分支,所以,现在,`git commit`就是往`master`分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
我们修改readme.txt文件和添加LICENSE文件并且使用`git add`将文件添加到暂存区。暂存区的状态变成了这样。
![3140921b12cc7d9a949076b2bb80d637.jpeg](evernotecid://AC84C433-9407-403E-89A8-42F56C323EC9/appyinxiangcom/25115422/ENNote/p38?hash=3140921b12cc7d9a949076b2bb80d637)
然后使用`git commit`提交代码到版本库,版本库就成了这样。
![f6ddf40f921f9953b6f84d107a11f689.jpeg](evernotecid://AC84C433-9407-403E-89A8-42F56C323EC9/appyinxiangcom/25115422/ENNote/p38?hash=f6ddf40f921f9953b6f84d107a11f689)
### 管理修改
第一次修改 -> git add -> 第二次修改 -> git commit
Git管理的是修改当使用git add命令后在工作区的第一次修改被放入暂存区准备提交但是在工作区的第二次修改并没有放入暂存区所以git commit只负责把暂存区的修改提交了也就是第一次的修改被提交了第二次的修改不会被提交。
提交后,用`git diff HEAD -- readme.txt`命令可以查看工作区和版本库里面最新版本的区别