命令列學習 · 小白原理教學

Git 命令 + PowerShell 命令
小白原理教學

不是操作手冊,是讓你懂為什麼
每個 English(英文單詞)後面都有中文全稱,每個命令都有生活比喻。
看完這頁,Git(版本控制工具)和 PowerShell(Windows 命令列)的底層邏輯全開。

1 Git(版本控制工具)是什麼?

生活比喻 Git(版本控制工具)就是你電腦裡的時光機。 你每改一次文件 → 按一下「存檔」→ 它幫你記一個存檔點。 想回到昨天某個版本?跳回去就行。想同時試兩種改法?開平行宇宙(branch,分支)各改各的。 做完實驗覺得不錯?兩個宇宙合體(merge,合併)。做壞了?直接丟掉那個宇宙,主線沒事。

Git 的四層結構(Four Stages)

Git 把你的文件在四個地方來回搬,每一層都有名字:

工作區 Working Directory 你正在改的文件 (資料夾裡那堆) 暫存區 Staging Area 準備要存檔的清單 (像洗衣籃) 本地倉庫 Local Repository 電腦本機的歷史存檔 (時光機記錄) 雲端倉庫 Remote Repository GitHub 上的雲端備份 (雲端保險箱) git add 加入洗衣籃 git commit 按洗衣機啟動 git push 上傳雲端 git pull(從雲端拉最新回來 → 三層一起更新) 換電腦開工第一件事:先 pull,避免衝突 Git 四層結構:文件從左流到右(存檔方向) 左 3 層在你電腦裡  |  右 1 層在 GitHub(代碼託管平台)雲端
圖 1:Git(版本控制工具)四層結構 · 文件流向圖
記住 你每天 99% 的時間都在左邊兩層(工作區(Working Directory)暫存區(Staging Area))。 真正「存檔」是 commit(提交),真正「上雲端」是 push(推送)。 這兩個動作是分開的,因為 commit 很頻繁(改完就存),push 只在想備份或給別台電腦用時才做。

2 Git 命令小白表(15 條最常用)

每條命令都有:英文全稱 → 中文意思 → 生活比喻 → 什麼時候用。從上到下大致按「使用順序」排列。

命令 英文全稱 中文意思 生活比喻 什麼時候用
git init initialize 初始化 在房間裝監控攝像頭,從今天起任何改動都被錄下 新資料夾第一次要用 Git(版本控制工具)時
git clone clone(克隆 / 複製) 克隆 從雲端完整抄一份到本地(含歷史記錄) 第一次拿別人 / 自己雲端倉庫的代碼到本機
git status status(狀態) 狀態 看房間有沒有亂(哪些文件改了 / 哪些還沒存檔) 想知道目前情況,不知道接下來該做什麼時第一招
git add add(加入) 加入暫存 把改好的衣服放進洗衣籃(暫存區) 改完文件、準備要存檔前
git commit commit(提交) 提交存檔 洗衣機啟動鍵,留一個永久記錄,要寫說明 git add 之後,想讓這次改動進入歷史
git push push(推送) 推送雲端 把本地存檔上傳到雲端保險箱(GitHub) 想備份、給另一台電腦用、或 commit 累積夠了
git pull pull(拉取) 拉取雲端 從雲端保險箱下載最新存檔回本地 換電腦開工第一步、別人改了代碼、同步雙機
git log log(日誌) 歷史日誌 翻看時光機記錄本,看過去每次存檔 想回顧誰何時改了什麼、找某個版本
git diff difference(差異) 差異對比 對比修改前後哪些行不同(逐行顯示) 改完想檢查自己到底改了什麼
git branch branch(分支) 分支 創個平行宇宙實驗,壞了不影響主線 做新功能 / 實驗 / 重構時
git checkout check out(切換 / 簽出) 切換分支 從一個平行宇宙跳到另一個 想切到不同分支工作(新版 git switch 更直覺)
git merge merge(合併) 合併 兩個平行宇宙合體,實驗成果併回主線 實驗分支做完、確認 OK,要併回 master(主分支)
git rebase rebase(變基 / 換底座) 變基 把你的修改重新疊在最新版上面,歷史更乾淨 pull 時避免多餘的合併記錄(Thomas 白 pass 規則)
git worktree work tree(工作樹) 工作樹 多開幾個平行宇宙資料夾同時工作,不互擾 同時做多個實驗、多個 Claude 分工、不想互相卡
git reset reset(重置) 重置 時光回溯,取消某次存檔(有軟硬兩種程度) 存錯了、commit 訊息打錯、想回到之前某個版本
Thomas 專用 你平時只說「git push」和「git pull」,Claude(AI 助手)會自動幫你跑對的命令(包含 pull --rebase)。 這張表是讓你懂背後發生什麼,不是要你記住怎麼打。

3 Git 常見符號 / 參數表

看到 Git 命令裡奇奇怪怪的符號不用怕,下面這張表幫你翻譯。

符號 英文名 中文名 意思 範例
-- double dash 雙橫線 長參數前綴(完整英文單詞) git pull --rebase
- single dash 單橫線 短參數前綴(單一字母縮寫) git commit -m "msg"
origin origin(源頭) 源頭 默認的雲端倉庫暱稱(GitHub 那個) git push origin master
HEAD HEAD(頭) 當前頭 當前所在的 commit(提交點) git reset HEAD
master / main master / main 主分支 默認主線分支名(舊稱 master,新稱 main) git checkout master
. dot(點) 當前目錄 代表這個資料夾所有東西 git add .(全部加入)
^ caret(尖號) 上一個 前一個 commit(提交) HEAD^ = 上一次存檔
~ tilde(波浪號) 往前 N 個 往前數 N 個 commit HEAD~3 = 往前 3 次存檔
--force / -f force(強制) 強制 ⚠️ 危險:覆蓋雲端 / 其他電腦 git push --force(Thomas 永久禁用)
--rebase rebase(變基) 變基模式 pull 時避免產生合併記錄,歷史乾淨 git pull --rebase origin master
-m "msg" message(訊息) 訊息參數 commit 時順便寫一句說明 git commit -m "修改 README"
⛔ 絕對禁止 git push --force 會直接覆蓋雲端,毀掉另一台電腦(筆記本 / 台式機)的工作。 CLAUDE.md(記憶規則文件)明令禁止,兩台電腦協作鐵律之一。遇到衝突用 git pull --rebase,衝突停下來手動解決,絕不 force push。

4 PowerShell(PS,Windows 命令列)是什麼?

生活比喻 PowerShell(簡稱 PS,全稱 Power Shell 中文「強力外殼」)就是 Windows 的萬能遙控器。 平時你用滑鼠點來點去操作電腦 → 這叫圖形界面; 用打字下指令操作電腦 → 這叫命令列。 PowerShell 是微軟自己做的命令列工具,比老舊的 cmd.exe(命令提示字元)更強大, 能自動化一切:批次改名、遠端連電腦、跑排程任務、裝軟體...

圖形界面 vs 命令列 對比

項目 圖形界面(GUI) 命令列(PowerShell)
操作方式 滑鼠點來點去 打字下指令
學習門檻 低(看圖就會) 高(要記指令)
速度 慢(要開視窗 / 找選單) 快(一行搞定)
批次處理 ⛔ 100 個文件要點 100 次 ✅ 一行處理 10000 個
自動化 ⛔ 沒辦法 ✅ 寫腳本定時跑
遠端控制 RDP(遠端桌面),要盯著螢幕 WinRM(遠端管理),背景跑
為什麼 PS 命令又長又有規律? PowerShell 的命令全叫 cmdlet(小指令),格式一律是「動詞-名詞」,例如: Get-Item(取-項目)Set-Location(設-位置)New-Item(新建-項目)。 動詞只有那幾個(Get/Set/New/Remove/Copy/Move/Start/Stop),名詞是對象。 記住動詞規律,你能猜對 80% 新命令

5 PowerShell 命令小白表(14 條最常用)

PowerShell 有兩套命名:短別名(像 Linux,方便打字)和長命令(Verb-Noun,語意清楚)。兩種都能用,效果一樣。

短別名 / 長命令 英文全稱 中文意思 生活比喻 對應 Linux
ls / Get-ChildItem list / get child item 列出 看這個資料夾有什麼東西 ls
cd / Set-Location change directory / set location 切換目錄 走進某個房間(資料夾) cd
pwd / Get-Location print working directory 印出當前位置 看我現在在哪個房間 pwd
cp / Copy-Item copy(複製) 複製 影印一份,原件還在 cp
mv / Move-Item move(移動) 移動 搬走,原位置沒了 mv
rm / Remove-Item remove(刪除) 刪除 垃圾桶(PS 預設不進回收筒,直接沒) rm
cat / Get-Content concatenate / get content 顯示內容 打開檔案看裡面寫什麼 cat
mkdir / New-Item make directory / new item 建資料夾 蓋新房間(或新檔案) mkdir
echo / Write-Output echo / write output 印出來 講一句話給螢幕聽 echo
Select-Object select object(選取物件) 選取欄位 只看我想看的欄位(不要全部資訊) awk
Where-Object where object(篩選物件) 篩選條件 只要符合條件的(過濾器) grep
ForEach-Object for each object(逐個處理) 逐個處理 對每一個東西做同一件事 for 循環
Get-Process get process(取進程) 取進程列表 看電腦裡跑著什麼程式 ps
Stop-Process stop process(停進程) 停止進程 強制關掉某個程式 kill

一個實戰範例

# 找出 D 槽所有大於 100MB 的 .mp4 檔案
Get-ChildItem D:\ -Recurse -Filter *.mp4 |
  Where-Object { $_.Length -gt 100MB } |
  Select-Object Name, Length, LastWriteTime

翻譯:

  1. Get-ChildItem D:\ -Recurse(列出 D 槽所有東西,-Recurse(遞迴)= 含子資料夾)
  2. |(管道符,把結果丟給下一步)
  3. Where-Object { $_.Length -gt 100MB }(篩選 $_(當前這個東西)的大小 -gt(大於) 100MB)
  4. | 再丟給下一步
  5. Select-Object Name, Length, LastWriteTime(只印檔名、大小、修改時間三欄)

6 PowerShell 符號表

這些符號在 PS 裡超常見,每個都有特定意思,認識後腳本看起來不再像天書。

符號 英文名 中文名 意思 範例
$ dollar sign 美元符號 變數前綴(PS 變數一律 $ 開頭) $name = "Thomas"
$_ dollar underscore 美元加底線 管道裡的「當前這個東西」(自動變數) ls | Where { $_.Name -like "*.md" }
| pipe(管道) 管道符 把上一步結果丟給下一步 ls | sort
-eq equal 等於 比較運算(PS 不用 == $a -eq 5
-ne not equal 不等於 比較運算 $a -ne 5
-gt / -lt greater / less than 大於 / 小於 比較運算 $a -gt 10
-like like(像是) 像是 萬用字元匹配* = 任意) -like "*.md"
-match match(匹配) 正則匹配 正規表達式(Regex)匹配 -match "^\d+"
# hash(井號) 井號 註解,這行不執行(純說明) # 這是說明
; semicolon(分號) 分號 一行跑多條命令 cd D:\; ls
` backtick(反引號) 反引號 一行太長折到下一行續寫 Get-ChildItem `
  -Path D:\
@() at parens 陣列符號 建陣列(一組東西) @("a","b","c")
{} curly braces 大括號 包裹代碼塊(Script Block) { $_.Name }
- hyphen(連字號) 連字號 參數前綴(PS 一律單橫線,不像 Git 有 -- -Path "D:\"
記憶術 看到 $ 就知道是變數;看到 $_ 就是當前在處理的這個(管道裡的); 看到 | 就是資料往下流;看到 -eq / -gt / -like 就是比較 / 過濾。 PS 不用 == != > <,因為這些在命令列裡有別的意思(> 是寫入檔案)。

7 Git 符號 vs PowerShell 符號對照

Thomas 會在兩個環境跳來跳去,這裡整理兩者差異避免混亂。

項目 Git(版本控制工具) PowerShell(Windows 命令列)
長參數前綴 -- 雙橫線(例 --rebase--force - 單橫線(例 -Path-Recurse
短參數前綴 - 單橫線(例 -m-f PS 沒有短 / 長之分,一律 -,但參數名常有別名
訊息參數 -m "msg"(message 縮寫) -Message "msg"(完整單詞)
註解符號 # 井號(.gitignore 裡用) # 井號(一樣
管道 | 很少用(Git 命令結果通常直接顯示,偶爾串 grep) 大量使用,是 PS 核心設計
當前位置符號 HEAD(當前提交點) .(當前資料夾)/ $PWD(當前路徑變數)
比較運算 不用(Git 沒有一般意義的條件比較) -eq / -ne / -gt / -lt / -like 等文字運算符
變數 環境變數 GIT_* 開頭 一律 $ 開頭(例 $env:PATH
路徑分隔 Git 在 Windows 也能用 /(正斜線) PS 兩種都接受:\(反斜線)或 /
重點 最常搞混的是 長參數前綴:Git 用 --(雙橫線),PS 用 -(單橫線)。 下次你在 PS 裡打 --recurse 報錯,改成 -Recurse 就好了。

8 Thomas 最常踩坑的 3 個符號

1$_(PS 的「當前這個東西」)

坑點:你曾把 $_ 原封不動搬到 Bash(Linux 命令列)裡用,結果 Bash 把它當「最後一個參數」變數,整個腳本行為亂掉。

原理$_ 是 PS 的管道自動變數,只在 | 後面才有意義。Bash 裡 $_ 是別的東西(上一條命令的最後一個參數)。

記法$_ = "在管道裡,正在流過這根管子的那個東西"。離開管道(離開 PS)就沒意義。
2--rebase(pull 時用)

坑點:兩台電腦(台式機 + 筆記本)都自動 push/pull,不加 --rebase 會產生一堆「Merge branch...」的多餘合併記錄,歷史亂七八糟。

原理:普通 pull = 「下載 + 合併」,合併會產生新 commit;--rebase = 「下載 + 把我的改動疊在雲端最新版上面」,沒有多餘記錄。

鐵律拉記憶必加 --rebase。CLAUDE.md(記憶規則文件)已寫死,Claude 會自動幫你跑 git pull --rebase origin master
3git worktree(工作樹)

坑點:聽到「worktree」以為是另一個倉庫,結果是同一個倉庫的第二個資料夾,改了這裡,那裡也看得見歷史。容易刪錯 / 改錯地方。

原理git worktree = 同一個 Git 倉庫開多個工作資料夾,每個資料夾可以停在不同 branch(分支),互不干擾。適合同時做多個實驗。

記法想像一本書有好幾個書籤夾在不同頁,每個書籤對應一個 worktree,但書(倉庫)只有一本。

額外:Thomas 的 Git 實際工作流(白 pass 規則)

簡化版 你平時只說兩句話
  • git push → Claude(AI 助手)自動幫你:先 git add . → 寫 commit 訊息 → git pull --rebasegit push
  • git pull → Claude 自動幫你:git pull --rebase origin master
你不用記 branch(分支)名、不用記參數,Claude 自己判斷 master(主分支)還是 worktree(工作樹分支)。

? FAQ(常見問題)

Q1:我為什麼要學這些命令?平時 Claude(AI 助手)都幫我跑了

A:懂原理後,當命令出錯(例如合併衝突、權限問題)你能看懂 Claude 在幹嘛,不會瞎急。 另外,有些安全鐵律(例如 --force 禁用)你得知道為什麼禁,才不會亂授權。

Q2:為什麼 Git 用 -- 而 PowerShell 用 -

A:歷史傳統不同。Git 源自 Linux,Linux 傳統是短參數用 -,長參數用 --(區分單字母和完整單詞)。 PowerShell 是微軟新設計,參數名都是完整單詞(沒有單字母縮寫),所以只用一個 - 就夠了。

Q3:PS 的 ls 和 Linux 的 ls 一樣嗎?

A:表面一樣,底層不同。PS 的 lsGet-ChildItem(取子項目)的別名,輸出的是物件(有 Name、Length、LastWriteTime 等屬性); Linux 的 ls 輸出的是純文字。所以 PS 可以 ls | Where { $_.Length -gt 1MB },Linux 要寫得複雜得多。

Q4:cat file.txt 在 PS 和 Linux 都能用?

A:都能用,效果類似(都是顯示文件內容)。PS 的 catGet-Content 的別名。 但 PS 輸出的仍是物件(一行一個字串),Linux 輸出的是純文字。日常用法上你感覺不出差別。

Q5:我在 Claude Code 裡面打命令,是用 Bash 還是 PowerShell?

A:Claude Code 在 Windows 上預設用 Bash(Git Bash 模擬環境),不是 PowerShell。 所以 lscatgrep 這些 Linux 命令在 Claude Code 的 Bash 工具裡能用,但 PS 專屬的 $_Where-Object 不能用。 要跑 PS 指令需要加 powershell -Command "..." 包住。

Q6:git reset 會不會刪掉我的文件?

A:看模式。git reset --soft HEAD^(軟重置)= 只取消 commit(提交),文件還在git reset --hard HEAD^(硬重置)= 連文件一起回到上一版,改的東西沒了。 永遠先用 --soft,除非你真的想丟

Q7:Junction(資料夾捷徑)跟 Git 有關嗎?

A:沒直接關,但 Thomas 的雙機系統會用 Junction 把 D:\ClaudeCode 指向 D:\Backup\Downloads(現階段的 CC 家)。 Git 把 Junction 當一般資料夾看,跟蹤的是指向後的真實內容,所以備份照樣正常。

← 返回首頁    ↑ 回到頂部
© 2026 Thomas Tang · 以小白角度出發,踩過才算數