跳到主要內容
其他筆記

Git 常用指令與終端機筆記

2018 年整理的 Git 學習筆記,包含基本終端機指令、Git 操作、分支、reset、SourceTree、Vim 與一些常用設定。

W

這篇是當時學 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 checkoutmaster、SourceTree 和 Vim 的操作方式。

現在回頭看,有幾個地方需要特別補充:

checkout 現在有更明確的替代指令

Git 2.23 之後新增了 git switchgit 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 當成一定救得回來的方法。

這篇其他內容就先保留當年的學習紀錄。

分享這篇