[TOC]

## Git相关知识
[参考资料](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)

### 下载安装

1.RHEL/CentOS系统

```
sudo yum install git
```

2.Debian/Ubuntu 系统
```
sudo apt-get install git
```
3.Mac OS X 系统:
```   
xcode安装 
```
4.Windows安装

> [国外地址](https://git-for-windows.github.io)
>
> [国内镜像](https://pan.baidu.com/s/1kU5OCOB#list/path=%2Fpub%2Fgit)
 

### 申明自己的信息
 
```
git config --global user.name "bsbforever"
git config --global user.email "bsbforever520@hotmail.com"

git config --global color.ui true
```






### 创建版本库(repository)
1.创建空的目录
```
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
```

2.初始化版本库
```
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
```

### 将文件放至版本库

不要使用windows 记事本打开文件修改

1.把文件放至库目录(子目录)
```
git add readme.txt
```
2.commit操作
```
git commit -m "wrote a readme file"
```
3.可一次性add多个文件
```
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
```









### 提交修改文件
1.首先修改其中的文件
2.查看修改状态
```
$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#    modified:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
```

3.查看差异部分
```
$ git diff readme.txt 
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
 Git is free software.
```

4.提交更改
```
git add readme.txt
```

```
$ git status

```
```
$ git commit -m "add distributed"
[master ea34578] add distributed
 1 file changed, 1 insertion(+), 1 deletion(-)
```
```
 $ git status
# On branch master
nothing to commit (working directory clean)
```

### 查看更改log
详细版本:
```
$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 15:11:49 2013 +0800

    append GPL

commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 14:53:12 2013 +0800

    add distributed

commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 19 17:51:55 2013 +0800

    wrote a readme file
```
或者简洁版本
```
$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
```

### 回退文件版本
Git采用HEAD^ HEAD^^...HEAD~100表示 上一个版本 上上个 等等

1.恢复至上个版本
```
$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed
```

2.回滚回退前版本
```
git reset --hard c94f51e0eab388ce24a930efa56263c26e6637fe
```
3.查看回退记录
```
$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file
```
### 删除版本库文件
```
git rm test.txt
```

## 远程仓库

### 账号配置
1.新建ssh key
```
ssh-keygen -t rsa -C "youremail@example.com"
```
2.添加公钥至GitHub账号

### 添加远程库
1.GitHub新建远程库
2.初始化git
```
git add .
```
3.关联本地库和GitHub库
```
$ git remote add origin git@github.com:michaelliao/learngit.git
```










4.推送至远程库
```
$ git push -u origin master
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (19/19), 13.73 KiB, done.
Total 23 (delta 6), reused 0 (delta 0)
To git@github.com:michaelliao/learngit.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.
```
5.同步至本地至远程库
```
$ git push origin master
```

### 从远程库克隆
1.新建远程库
2.克隆远程库(本地目录)
```
$ git clone git@github.com:michaelliao/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

$ cd gitskills
$ ls
README.md
```

## 分支管理
1.创建和切换分支
```
$ git checkout master
```
2.查看当前分支
```
$ git branch

```
3.合并分支
```
 git merge dev
```
4.给当前commit上打标签
```
git tag v1.0
```
5.按commit号大标签
```
git tag v0.9 6224937

git tag -a v0.1 -m "version 0.1 released" 3628164
```
6.删除标签
```
$ git tag -d v0.1
Deleted tag 'v0.1' (was e078af9)
```
7.推送标签至远程库
```
$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:michaelliao/learngit.git
 * [new tag]         v1.0 -> v1.0
```
 
## Git常用配置

配置文件目录

```
.git/config
```
### 配置忽略文件

记得这个文件也要提交

```
vim .gitignore

# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

# My configurations:
db.ini
deploy_key_rsa
```

1.强制提交
```
$ git add -f App.class
```

2.检查ignore文件
```
git check-ignore
```
### 配置别名
```
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
```