這篇是當時學 Git 時整理下來的指令筆記,除了 Git 本身,也一起記了一些終端機、SourceTree 和 Vim 的操作。
基本終端機指令
ls
可以看到目前目錄下的檔案。
ls -a
顯示包含隱藏檔案在內的內容。
ls -al
顯示比較完整的檔案資訊。
which git
查看 Git 安裝在哪裡。
git --version
查看目前 Git 版本。
pwd
查看現在所在的位置。
建立檔案與資料夾
touch git.html
建立檔案。
mkdir test
建立新的資料夾。
當時有特別記:
建立空的資料夾時 Git 不會感應到,要在資料夾裡面放入檔案後,
git status才會出現。 空的目錄本身無法提交到 Git。
查看與操作檔案
echo "hello"
列印出:
hello
把內容寫入檔案:
echo "hello" > world.html
查看檔案內容:
cat world.html
複製檔案:
cp test.html asd.html
移動或重新命名:
mv test.html cde.html
也可以直接用:
git mv test2.html ruby.html
刪除檔案
rm cde.html
直接刪除檔案。
rm *.html
刪除目前目錄下所有 .html 檔案。
rm -rf .git
刪除目前專案的 Git 版控資料。
這個指令要非常小心。
Git 初始化
git init
初始化 Git,讓目前這個目錄開始由 Git 控管。
SourceTree
當時使用 SourceTree 的方式:
New / Create Local Repository
建立新的本機 Repository。
查看目前狀態
git status
如果看到:
nothing to commit
代表目前沒有新的變更需要提交。
查詢檔案作者
git blame index.html
查看檔案每一行最後是由誰修改。
SourceTree
對檔案按右鍵:
Blame Selected
也可以查看每一行的修改紀錄。
加入暫存區
工作目錄 → 暫存區。
加入單一檔案:
git add welcome.html
全部加入:
git add --all
提交
暫存區 → Git 紀錄。
git commit -m "init commit"
-m 後面接這次提交的訊息,例如:
git commit -m "#34 bug fix"
當時記的基本操作順序:
git status
↓
git add 檔案
↓
git commit -m "訊息"
查詢歷史紀錄
git log
查看提交歷史。
每一筆 commit 都會有自己的 SHA:
commit b11569e1ef6b1c873aa184350e07e490f78d3f50
想看得簡單一點:
git log --oneline --graph
查詢單一檔案紀錄
git log -p test.html
SourceTree
對檔案按右鍵:
Log Selected
可以查看這個檔案的歷史紀錄。
查詢作者
git log --oneline --author="XXX"
查詢 Commit 訊息
git log --oneline --grep="wtf"
查詢曾經加入或刪除某段文字的 Commit
git log -S "xxx"
查詢一段時間內的 Commit
例如查今天早上的紀錄:
git log --oneline --since="9am" --until="12pm"
從暫存區移除
git rm --cached xxx.html
不是刪除檔案,而是停止追蹤這個檔案。
SourceTree
在暫存區對檔案按右鍵:
Stop Tracking
修改最後一次 Commit
如果想把新的檔案合併到上一筆 Git 紀錄:
touch cat.html
git add cat.html
git commit --amend
進入 Vim 後:
:wq
存檔並離開。
git commit --amend 也可以用來修改最後一次 Commit 的訊息:
git commit --amend
進入編輯畫面後:
i
進入輸入模式,修改訊息後:
:wq
存檔離開。
再查看:
git log --oneline
當時也有記到一件事:
Commit 經過 amend 後,SHA 值也會跟著改變。
SourceTree
當時的操作路徑:
Working Copy
→ Commit Options
→ Amend Last Commit
→ 修改訊息
→ Commit
還原檔案
git checkout test.html
把尚未提交的檔案變更還原。
全部還原:
git checkout .
拿兩個版本之前的檔案內容:
git checkout HEAD~2 test.html
Reset:拆掉 Commit 重做
先查看歷史:
git log --oneline
例如:
git reset ae8a3ab^
^ 可以理解成往前一個 Commit。
例如:
git reset HEAD^
往前兩個:
git reset HEAD~2
當時整理的三種模式:
Soft
git reset --soft 版號
拆出來的檔案會保留在暫存區。
Mixed
git reset --mixed 版號
檔案會保留在工作目錄。
這也是 git reset 預設的模式。
Hard
git reset --hard 版號
工作目錄的變更也一起丟掉。
這個要特別小心。
Reflog
git reflog
可以查看 Git 的 HEAD / 分支移動紀錄。
SourceTree
對某個 Commit 按右鍵:
Reset master to this commit
再選擇:
Soft
Mixed
Hard
分支
查看目前分支:
git branch
建立分支:
git branch xxx
刪除分支:
git branch -d xxx
不能刪除目前正在使用的分支,需要先切換到其他分支。
切換分支:
git checkout xxx
建立並直接切換:
git checkout -b xxx
SourceTree
建立分支:
Branch
如果勾選:
Checkout New Branch
建立完成後會直接切換過去。
切換分支時,也可以直接對分支點兩下。
刪除分支:
右鍵分支
→ Delete xxx
合併分支
先切換回主線:
git checkout master
再把其他分支合併進來:
git merge xxx
SourceTree
對想合併的分支按右鍵:
Merge xxx into current branch
不使用 Fast-forward 合併
當時把這個畫面記成「小耳朵」。
git merge cat --no-ff
會保留一筆 Merge Commit。
如果進入 Vim:
:wq
存檔離開。
Clone 專案
把專案下載到本機:
git clone xxxxxxxxxxxxx
SourceTree
File
→ New
→ Clone Repository
→ 貼上 Repository 資訊
Git Config
查看目前設定:
git config --list
全域設定
git config --global user.name "XXX"
git config --global user.email "XXX@xxx.xx"
專案專屬設定
git config --local user.name "XXX"
git config --local user.email "XXX@xxx.xx"
SourceTree
當時的設定位置:
Repository Settings
→ User Information
修改 Git 編輯器
當時 Git 預設會進 Vim,也可以換成其他編輯器。
例如:
git config --global core.editor emacs
Git Alias
可以幫常用指令設定縮寫。
git config --global alias.co checkout
之後:
git co
等同:
git checkout
其他:
git config --global alias.br branch
git config --global alias.st status
git config --global alias.l "log --oneline --graph"
之後就可以使用:
git br
git st
git l
Vim 基本操作
當時順便記了一些 Vim 操作。
i = insert
a = append
o = new line
存檔:
:w
離開:
:q
存檔並離開:
:wq
Windows 指令筆記
當時也一起記了一些 Windows 終端機常用指令:
cd 切換目錄
dir 列出目前檔案
mkdir 建立新的資料夾
copy 複製檔案
move 移動檔案
del 刪除檔案
cls 清除畫面內容
cd .. 回到上一層
另外在 Unix / Git Bash 類型的終端機中:
cd ~
可以回到目前使用者的 Home 目錄。
2026 年後記
這篇是 2018 年學 Git 時留下來的筆記,所以保留了當時使用 git checkout、master、SourceTree 和 Vim 的操作方式。
現在回頭看,有幾個地方需要特別補充:
checkout 現在有更明確的替代指令
Git 2.23 之後新增了 git switch 和 git restore。
以前切換分支:
git checkout xxx
現在也可以寫:
git switch xxx
以前還原工作目錄的檔案:
git checkout test.html
現在也可以使用:
git restore test.html
原本的 git checkout 並沒有不能用,只是現在多了語意比較清楚的寫法。
主分支名稱不一定是 master
這篇當年使用:
git checkout master
現在很多新的 Repository 預設主分支會叫做:
main
實際名稱還是要看專案本身。
刪除 .git
rm -rf .git
會刪除目前目錄的 Git Repository 資訊,但不會把工作目錄裡的程式碼一起刪掉。
如果專案已經有推送到 GitHub 或其他遠端 Repository,歷史紀錄也不一定真的就此消失。
不過這仍然是一個要非常小心使用的指令。
git reset --hard
這篇以前把 git reflog 記成誤用 --hard 後的救援方式,但它並不是所有情況都能救。
如果丟掉的是曾經 Commit 過、Git 還保有紀錄的內容,可能可以透過 reflog 找回。
但如果只是工作目錄裡從來沒有 Commit 過的修改,被 reset --hard 丟掉之後,就不能把 reflog 當成一定救得回來的方法。
這篇其他內容就先保留當年的學習紀錄。