iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
1

我一開始也是用 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 儲存改過的檔案、離開。

有不懂的地方歡迎提問,我想辦法再講詳細一點。


上一篇
工欲善其事,必先利其器;一定要打指令的話,我也要再漂亮的地方打。
下一篇
git commit
系列文
你終究是要精通 git command line 的,那為什麼不一開始就精通。7
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言