Git 基礎操作
Git 教學現在有獨立的網站了!請移駕 Git 零到一百。
一分鐘入門只說明如何提交檔案,但是在版本之間切換才是版本管理工具的精華,接下來的本文和下一篇文章分別為基礎操作(單一分支)和分支操作(多分支),快速檢索的方式是從右側目錄快速定位操作內容,例如提交錯誤時可以找到「還原提交」定位到 git reset。
基礎操作包含以下指令,文章中會介紹如何更靈活的 add/commit 檔案,以及復原檔案。
git add # 預存檔案
git commit # 提交檔案
git reset # 還原提交狀態
git checkout # 檔案還原的舊版指令,本文不介紹
git restore # 檔案還原的新版指令
git reflog # git 操作救命稻草
新增檔案 git add
git add
使用 <pathspec>
來指定檔案,可以輕鬆的區分檔案,例如
git add *.py # 追蹤目前資料夾第一層的所有 py 檔
git add **/*.py # 追蹤所有 py 檔
git add src/**/*.py # 追蹤 src 資料夾中的所有 py 檔
除了此之外兩個方便的指令:
-u
: 只預存已追蹤的檔案。-p
: 補丁模式,互動式加入預存,常用選項為- y, yes
- n, no
- d, 該檔案之後都不要加入
- s, 切成更小的區塊 (hunk)
- 不太需要用補丁模式,改用 lazygit 完成相同功能方便一百倍
看不懂 pathspec?請見看懂文檔。
略過特定副檔名的檔案
# 方法一:使用表達式
git add . ':!*.txt' ':!*.py'
# 方法二:使用 git reset
git add . # 預存全部檔案
git reset '*.txt' '*.py'
提交檔案 git commit
git commit -am <message>
: 懶人指令,略過git add .
。git commit -m "<Title><按兩下Enter>
: 提交有標題的 commit message 的方式,打好標題後按兩次 enter,到第三行繼續寫內容。
修改上一次提交
常常會提交完成後馬上發現訊息寫錯、程式 typo,要怎麼修改?
直接修改現在的檔案內容並且使用下列指令可以完成,amend 的意思是修復(複寫)最近一次的提交
git commit --amend
: 修改上次的提交訊息和檔案。git commit --amend --no-edit
: 修改上次的提交檔案,訊息不變。
還原檔案 git restore
git restore [<options>] <pathspec>
用於檔案還原,只會回復檔案內容不會修改提交歷史,常用參數有三個,分別是
-s, --source
: 指定恢復的提交來源。-S, --staged
: 還原已預存的檔案(白話文:取消 add 或稱作 unstage)。-W --worktree
: 還原到工作目錄(白話文:還原檔案在工作目錄(硬碟)的狀態)。預設開啟,但是使用 -S 時會關閉,原因是讓你可以只取消預存而不是連檔案修改都還原了。
為什麼用新版 git restore 不用舊版 checkout?
因為舊版本用於檔案還原的指令混雜,例如 git reset <pathspec>
可以指定檔案踢出預存,但是 git reset --hard
卻不能指定檔案;而 git checkout -- .
可以還原未預存的檔案,卻又不能處理已預存的檔案。
如果 checkout 已經用的很熟練繼續用當然也沒問題。