## Git 技能學習
#### Git 安裝
`sudo apt-get install git` 在Linux上安裝Git
`git config -l` 或者 `git config --list` 列出所有配置
`git config --global <option>` 配置全局選項
- `git config --global user.name "YourName"`
- `git config --global user.email "YourE-Mail"`
#### 創建版本庫
`git init` 初始化一個Git倉庫
`git add <file>` 暫存文件
- `git add README.md` 或者 `git add .`
`git commit` 提交暫存文件到本地倉庫
- `git commit -m "add README.md file"`
#### 版本穿梭
`git status` 查看工作區狀態
`git diff` 查看修改內容
- `git diff README.md`
`git log` 顯示提交日志
`git log --pretty=oneline` 一行顯示提交日志
`HEAD` 表示當前版本, `HEAD^` 上一個版本, `HEAD^^` 上上一個版本, `HEAD~100` 往上100個版本
`git reset --hard HEAD^` 回退到上一個版本
`git reset --hard 5ec5b8e` 指定回到某個版本
`git reflog` 查看命令歷史
#### 版本修改
`git diff HEAD -- README.md` 查看工作區和版本庫最新版本的區別
`git checkout -- <file>` 丟棄工作區的修改
- `git checkout -- README.md`
`git reset HEAD <file>` 撤銷暫存區修改
- `git reset HEAD README.md`
`git rm <file>` 從版本庫刪除文件
#### 遠程倉庫
`ssh-keygen -t rsa -C "YourE-Mail"` 創建SSH Key
`git remote add origin git@github.com:username/project.git` 添加遠程庫
`git push -u origin master` 推送本地分支內容到遠程庫并且關聯遠程分支
`git push origin master` 推送master分支到遠程庫
`git clone git@github.com:username/project.git` 用git協議克隆一個遠程庫
`git clone https://github.com/username/project.git` 用https協議克隆一個遠程庫
`git remote` 查看遠程庫信息
`git remote -v` 查看遠程庫詳細信息
`git pull` 拉取遠程庫的新提交
`git checkout -b <branch_name> origin/<branch_name>` 創建遠程分支到本地
- `git checkout -b test origin/test`
`git branch --set-upstream <branch_name> origin/<branch_name>` 本地分支關聯遠程分支
- `git branch --set-upstream test origin/test`
`git remote remove origin` 或者 `git remote rm origin` 移除關聯的遠程庫
#### 分支管理
`git branch` 查看分支
`git branch <name>` 創建分支
- `git branch edit_zh`
`git checkout <branch_name>` 切換分支
- `git checkout edit_zh`
`git checkout -b <branch_name>` 創建并切換分支
- `git checkout -b test`
`git checkout -b dev origin/dev` 創建遠程分支到本地
`git merge <branch_name>` 合并某分支到當前分支
- `git merge test`
`git merge --no-ff -m "merge with no-ff" test` 禁用Fast forward模式合并分支
`git log --graph` 查看分支合并圖
`git log --graph --pretty=oneline --abbrev-commit` 查看分支合并情況
`git branch -d <name>` 刪除分支
- `git branch -d test`
`git branch -D test` 強制刪除未合并的分支
`git stash` 儲藏未提交的工作
`git stash list` 查看儲藏列表
`git stash apply` 恢復儲藏的內容
`git stash drop` 刪除儲藏
`git stash pop` 恢復儲藏的內容并刪除儲藏
#### 標簽管理
`git tag <name>` 在當前打一個標簽
- `git tag v1.0`
`git tag` 查看所有標簽
`git tag v0.9 4a34a5e` 在指定提交上打標簽
`git show <tagname>` 查看標簽信息
- `git show v1.0`
`git tag -a v2.0 -m "version 2.0 released" 4a34a5e` 創建帶有說明的標簽
`git push origin v1.0` 推送標簽到遠程
`git push origin --tags` 推送全部標簽到遠程
`git tag -d v1.0` 刪除標簽
`git push origin :refs/tags/v1.0` 刪除遠程標簽
#### 自定義Git
`.gitignore` 忽略特殊文件
`git add -f file` 強制添加被忽略的文件
`git check-ignore` 檢查忽略規則
- `git check-ignore -v file`
```
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"
```
配置別名