#### Git指令
1. 創建版本庫
```
# 在當前目錄創建一個空的git代碼庫
git init
# 在當前目錄創建一個名為maigic-data的文件夾,然后在其中創建一個空的git代碼庫
git init [magic-data]
# 下載一個項目和它的整個代碼歷史
git clone [url]
```
2. 配置
```
# 設置用戶姓名
git config [--global] user.name "username"
# 設置用戶郵箱
git config [--global] user.email "email@user.name"
# ?配置默認文本編輯器,當Git 需要你輸入信息時會調用它
git config --global core.editor vim
# 為status配置別名st,這樣git status就可以寫成git st
git config --global alias.st status
# 查看當前倉庫的所有配置信息
git config --list
# 查看當前倉庫的用戶名信息
git config user.name
# 編輯全局配置文件(用戶名和e-mail信息就記錄在其中)? 所在目錄:c:/users//.gitconfig
git config -e --global
# 編輯當前倉庫的配置文件? 所在目錄:.git\\config
git config -e
# 獲取幫助
git --help <verb>
```
3. 增加/刪除/提交/撤銷
```
# 添加文件到暫存區
git add <file>
# 將當前目錄下(遞歸子目錄)所有文件加入到暫存區
git add .
# 將當前目錄下(遞歸子目錄)所有追蹤狀態的文件加入到暫存區
git add -u .
# 將所有txt后綴的文件加入到暫存區
git add *.txt
# ?刪除工作區文件,并且將這次刪除放入暫存區(若文件在工作區或暫存區中有修改,命令會執行失敗)
git rm <file>
# 強制刪除工作區文件,并且將這次刪除放入暫存區(若文件在工作區或暫存區中有修改,也會執行刪除操作)
git rm -f <file>
# 不刪除工作區對應的文件,只將文件刪除放入暫存區以供提交
git rm --cached <file>
# 將a改名為b,并且將這個改名放入暫存區
git mv <filea> <fileb>
# 添加注釋并將暫存區中的所有修改提交到本地倉庫
git commit -m "注釋"
# 添加注釋并將暫存區中的file的修改提交到本地倉庫
git commit <file> -m "注釋"
# 添加注釋使用當前提交覆蓋上一次的提交
git commit --amend -m "注釋"
# 添加注釋使用file的當前提交覆蓋上一次的提交
git commit -m "注釋" --amend <file>
# 添加注釋并將工作區和暫存區中的所有修改提交到本地倉庫
git commit -a -m "注釋"
# 添加注釋并將工作區和暫存區中的所有修改提交到本地倉庫
git commit -am "注釋"
# 拿`α`版本提交的信息(作者、提交者、注釋、時間戳等)來提交當前修改
git commit -c?α
# 丟棄暫存區中的file文件的修改
git reset -- <file>
# 丟棄暫存區中的file文件的修改
git reset <file>
# 使用本地版本庫`α`提交處的file版本覆蓋暫存區中的file
git reset α <file>
# 丟棄暫存區中的所有文件的修改(工作區不受影響)
git reset
# --mixed為缺省參數,丟棄暫存區中的所有文件的修改(工作區不受影響)
git reset --mixed
# 丟棄暫存區和工作區中的所有文件的修改(工作區中未追蹤的文件不受影響)
git reset --hard
# 僅將當前分支的HEAD指向`β`提交(暫存區和工作區中的所有文件的修改都不丟棄)
git reset --soft?β
# 僅將當前分支的HEAD指向上N次提交(暫存區和工作區中的所有文件的修改都不丟棄)
git reset --soft HEAD~[n]
# 在被污染的工作區中回滾merge或者pull
git reset --merge? <commit>
# 回滾`β`提交,然后提交到本地倉庫
git revert?--no-edit β
# 回滾掉HEAD~N處的提交,不自動提交到本地倉庫
git revert HEAD~[N]
# 回滾掉(HEAD~2, HEAD\]之間的2次提交,不自動提交到本地倉庫
git revert -n HEAD~2..HEAD
```
4. 分支(查看/新建/切換/刪除)
```
# 列出所有本地分支
git branch
# 列出所有遠程分支cache
git branch -r
# 列出所有本地分支和遠程分支cache
git branch -a
# 列出所有本地分支和遠程分支cache(含簡單說明)
git branch -av
# 查看所有本地分支和遠程分支cache之間的追蹤關系
git branch -vv
# 在當前分支的HAED指針下創建名為`A`的分支(創建完不會切到`A`分支上)
git branch A
# 將分支`A`重命名為`B`
git branch -m A B
# 切換到`A`分支上
git checkout A
# 創建并切換到`A`分支上
git checkout -b A
# 不存在則創建,并切換到`A`分支上
git checkout -B A
# 強制切換到`A`分支上,丟棄暫存區和工作區中的所有文件的修改(工作區中未追蹤的文件不受影響)
git checkout -f A
# 切換到上一次分支
git checkout -
# 刪除名為`A`的分支(必須先切到其他分支上才能執行刪除操作)
git branch -d A
# 強制刪除名為`A`的分支(必須先切到其他分支上才能執行刪除操作)
git branch -D A
# 刪除遠程分支origin/`A` cache
git branch -dr origin/A
# 使用本地版本庫中的HEAD處提交覆蓋暫存區和工作區中的<file>
git checkout HEAD <file>
# 使用本地版本庫中的`β`提交覆蓋暫存區和工作區中的<file>
git checkout β <file>
```
5. 分之合并
```
# 將dev分支merge合并到當前分支Master(無沖突時會直接提交)
git merge dev
# 將dev分支merge合并到當前分支Master(無沖突時使用注釋直接提交)
git merge -m "注釋" dev
# 將dev分支merge合并到當前分支Master(不自動提交)
git merge --no-commit dev
# 將dev分支rebase合并到當前分支Master
git rebase dev
# 撤銷當前merge或rebase操作
git merge/rebase --abort
# 將`A`提交合入當前分支。若不沖突,則直接使用`A`的提交信息進行commit,否則要先進行沖突處理,然后繼續執行git?cherry-pick --continue來完成合并的提交工作
git cherry-pick A
# 撤銷當前cherry-pick操作
git cherry-pick --abort
```
6. 儲藏區
```
## git stash
# 有未完成的功能需要切換分支開發時 - 跨分支
# 將所有未提交的修改存儲到stash區(棧)中,形式stash@{num}
git stash
# 添加備注保存
git stash save `備注`
# 查看stash區存儲了那些鍵值對
git stash list
# 顯示stash區最近的一次保存內容改動
git stash show
# 顯示stash區指定版本的內容改動
git stash show stash@{1}
# 對于stash區是刪除,對于工作區就是恢復。(最近的一次保存)
git stash pop
# 取出指定版本放入工作區,并刪除此版本
git stash pop stash@{1}
# 取出最近的一次保存放入工作區,沒有刪除操作
git stash apply
# 去除指定的版本放入工作區,沒有刪除操作
git stash apply stash@{1}
# 刪除stash區中指定版本
git stash drop stash@{1}
# 清空stash區
git stash clear
```
7. 遠程操作
```
# 克隆到本地
git clone [url]
# 從遠程倉庫拉取master分支狀態的變化信息(工作區文件不會更新)
git fetch origin master
# 從遠程倉庫拉取所有分支和tag狀態的變化信息(工作區文件不會更新)
git fetch
# 先執行fetch,然后將遠程origin/master分支merge合并到當前分支(最后會更新origin/master, origin/HEAD指針到最新提交)
git pull origin master
# 先執行fetch,然后將遠程origin/v1.0分支merge合并到本地master分支
git pull origin v1.0:master
# 先執行fetch,然后將對應的遠程分支merge合并到當前分支(當前分支需要預存遠程分支的追蹤關系)
git pull origin
# 將當前分支更新推送給對應的遠端分支
git push origin
# 將本地倉庫的修改push到origin所指向的遠程倉庫URL的master分支上
git push -u origin master
# 將本地分支v1.0更新推送給對應的遠端分支remotes/origin/v1.0
git push origin v1.0
# 將本地所有分支更新推送給各自對應的遠端分支
git push origin --all
```
##### 參考鏈接
[可可西 - 博客園](https://www.cnblogs.com/kekec/p/9248487.html)
[https://github.com/geeeeeeeeek/git-recipes](https://github.com/geeeeeeeeek/git-recipes)
- 版本控制之Git簡介
- Git工作流程
- Git工作區、暫存區、版本庫
- Git 指令匯總
- Git 忽略文件規則 .gitignore
- pull request
- HTTP簡介
- HTTP - Keep-Alive
- HTTP緩存
- XMLHttpRequest
- Fetch
- 跨域
- HTTP 消息頭
- TCP/IP
- TCP首部
- IP首部
- IP 協議
- TCP/IP漫畫
- 前端開發規范
- 前端開發規范整理
- 前端未來規劃
- HTML思維導圖
- CSS思維導圖
- 布局
- position,float,display的關系和優先級
- line-height、height、font-size
- 移動端適配
- JS 對象
- JS 原型模式 - 創建對象
- JS 預編譯
- 探索JS引擎
- ES