# **指令參考**
## 常用指令
```shell
$ cd . 目錄原地 #. = 原地
$ cd .. 回目錄的上一層 #.. = 上一層
$ cd - 回上一動作的目錄層
$ ls -l 顯示這個目錄內的物件
$ ls -al 顯示這個目錄內包含隱藏檔的物件
$ mkdir abc 建立 abc 資料夾
$ mv a b 將 a 檔名改成 b
$ cp a b 將 a 檔複製後命名成 b
$ cat a 查 a 檔案內容
$ echo "b" >a.xxx 將 "b" 寫進 a 檔案內
$ pwd 確認當前目錄所在層
$ rm a 移除 a 檔案
$ rm-rf 強制移除 # 慎用
"f"orce = 強制
"r"ecursive = 層遞
空格代表 and
$ touch a 新增 a 檔案
$ touch abc/def 在 abc 底下新增 def 檔案
$ vim a 更改 a 檔案內容
$ man man 使用手冊
ctrl+w 一個段落刪除
ctrl+u 整行刪除
ctrl+l 清理排面
ctrl+r 查詢字串
```
## Git指令
#### 基本指令
```shell
$ git init 將資料夾初始化給 Git 版控
$ git status 版控後查詢狀態
$ git add a 將 a 檔案加到暫存區
$ git add . 將本層全部加到暫存區
$ git add *.html 將 .html 這個類型檔案都加到暫存區 # * = 任意
$ git add --all 從初始化的那個目錄開始包含全部
$ git rm --cached a 將 a 踢出暫存區
$ git commit 暫存區全部加到本地儲存庫
$ git commit -m "a" 暫存區加到本地儲存庫並做命名 a
```
#### 查詢指令
```shell
$ git log 檢視當前 branch 所有 commit 紀錄
$ git log --oneline 簡短檢視當前分支 commit 紀錄
$ git log --oneline --all 簡短檢視當前全部 commit 紀錄
$ git blame a 查詢 a 檔案的全部撰寫紀錄
$ git log -p b 查詢 b 目錄底下所有檔案的 commit 紀錄
$ git reflog 查詢 HEAD 底下所有歷程 commit 紀錄 #保留30天
```
```shell
^ ~ 倒退原則
^ = caret = -1 n 個^就往前 n 個版本
~n = tilde = -n 直接往前 n 個版本(可取代^)
例:
^1 = Parents1
^2 = Parents2
~1 = Parents1
~2 = Parents1 再往後
HEAD^ = Parents 1
HEAD^^ = Parents 1 的 Parents 1
HEAD^^2 = Parents 1 的 Parents 2
```
#### 分支指令
```shell
$ git checkout a 切換 HEAD 到分支 a #新版本 可用 switch 替代
$ git checkout b 還原 b 檔案 #新版本 可用 restore 替代
$ git checkout -b a 建立並切到 a 分支
$ git check HEAD-n a 還原到 n 個版本前的 a 檔案
$ git branch 查分支
$ git branch a 原地新增 a 分支
$ git branch a id 在 id 地址新增 a 新分支
$ git branch -d a 刪除分支 a # -D硬刪
$ git branch -f a id 將 a 移到 id 地址
```
#### 合併指令
```shell
$ git merge a HEAD 位置去合併(吃掉) a 分支
$ git merge a --no-ff 合併過程取消快轉合併 #強制生成完整分支線
$ git merge --abort 取消該次合併
merge合併衝突時
手動確認衝突點 -> vim 修改衝突點 -> add -> commit -> 完成合併
rebase合併衝突時
手動確認衝突點 -> vim 修改衝突點 -> rebase --continue -> 完成合併
$ git rebase a 將 HEAD 位置放到 a 分支後面延續
```
#### 還原指令
```shell
$ git reset a 帶著 HEAD 跟分支同時回到 a 分支版本
$ git reset a --mixed 版本差異間的檔案丟回工作目錄
$ git reset a --soft 版本差異間的檔案丟回暫存區
$ git reset a --hard 版本差異間的檔案全部捨棄
$ git reset ORIG_HEAD --hard 回到最後一次危險操作
$ git reset id 前往 commit id 的版本 # id=版本號碼
$ git reset id^ 前往 commit id 的前一個版本
$ git reset id~n 前往 commit id 的前 n 個版本
```