我一開始也是用 GUI ( Sourcetree ) 的(那是個選擇不多的年代),其中一個好用的地方是,我可以看到我要把什麼東西加進 stage,我可以一次加一個檔案,也可以以行為單位勾選加入,這個 command 做得到嗎?
基本用法:新增檔案 by 路徑
git add 檔案路徑
新增所有改變過的檔案
git add .
用了一段時間,看著系統給的提示,隱約知道好像有些參數可以帶入,可又不知道可以帶哪些參數,又怕亂代會出事,這時候就可以...
git add -----隨便亂打,要很亂的那種
然後系統就會告訴你,你打錯了,有哪些參數可以用(屢試不爽,越試越爽)
error: unknown option `-----'
usage: git add [<options>] [--] <pathspec>...
-n, --dry-run dry run
-v, --verbose be verbose
-i, --interactive interactive picking
-p, --patch select hunks interactively
-e, --edit edit current diff and apply
-f, --force allow adding otherwise ignored files
-u, --update update tracked files
--renormalize renormalize EOL of tracked files (implies -u)
-N, --intent-to-add record only the fact that the path will be added later
-A, --all add changes from all tracked and untracked files
--ignore-removal ignore paths removed in the working tree (same as --no-all)
--refresh don't add, only refresh the index
--ignore-errors just skip files which cannot be added because of errors
--ignore-missing check if - even missing - files are ignored in dry run
--chmod (+|-)x override the executable bit of the listed files
絕大部分都不會用到,我會用到的只有 -p,他可以逐個區塊讓你選擇要不要加入 state,當然也可以逐行選擇。
git add . -p
按完之後你會看到
最後一行 要把這個區塊 ( hunk ) 加入 stage 嗎[y,n,q,a,d,j,J,g,/,s,e,?]?
y:好
n:不
q:不,而且我要離開
a:好,而且只要是這個檔案的更動我全都要
d:不,而且只要是這個檔案的我全都不要
j:沒用過;不,跳到下一個未決定的區塊
J:沒用過;不,跳到下一個區塊
k:沒用過;不,跳到上一個未決定的區塊
K:沒用過;不,跳到上一個區塊
g:沒用過;列出所有區塊,goto 過去
/:沒用過;以 regex 搜尋符合的部分
s:把當前區塊再切分(如果可以切的話)
e:編輯,使用系統設定的文字編輯器(通常是 vim,之後會教改成 VSCode)
?:りしれ供さ小,詳細的告訴你這些選項的功能
選 e 編輯時,最下面會看到這串註解
# Manual hunk edit mode -- see bottom for a quick guide.
@@ -26,7 +39,7 @@
<option name="SPACE_BEFORE_FOR_PARENTHESES" value="false" />
<option name="SPACE_BEFORE_CATCH_PARENTHESES" value="false" />
<option name="SPACE_BEFORE_SWITCH_PARENTHESES" value="false" />
- <option name="SOFT_MARGINS" value="160" />
+ <option name="SOFT_MARGINS" value="80" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="2" />
# ---
# To remove '-' lines, make them ' ' lines (context).
# To remove '+' lines, delete them.
# Lines starting with # will be removed.
#
# If the patch applies cleanly, the edited hunk will immediately be
# marked for staging.
# If it does not apply cleanly, you will be given an opportunity to
# edit again. If all lines of the hunk are removed, then the edit is
# aborted and the hunk is left unchanged.
有刪除的行,突然不想刪除了,請把該行最前面的 '-'
改成 ' '
(vim 的改法是:游標移到 '-'
上方(覆蓋),按下 r空白
)
有新增的行,突然不想新增了,直接刪除該行
(vim 的改法是:游標移到 '+'
那一行,按下 dd
)
都改好了之後按 :wq
寫入離開,或著是 :q!
不寫入強制離開。
都改好了之後按 ZZ
儲存改過的檔案、離開。
有不懂的地方歡迎提問,我想辦法再講詳細一點。