# 【Git】checkout 與 switch 比較

我來幫你整理 `git switch` 和 `git checkout` 的差異，並用表格讓你快速比較。

---

## 1️⃣ 歷史背景

- **`git checkout`** 是 Git 早期就有的指令，功能很多，但語意太複雜，既可以切換分支、也可以檢出檔案，容易讓初學者混淆。
- **`git switch`**（Git 2.23 之後加入）是為了讓「切換分支」這個動作更直觀而出現的，專注於分支切換，不負責檔案檢出。

---

## 2️⃣ 功能比較表

<table id="bkmrk-%E5%8A%9F%E8%83%BD-git-checkout-git-"><thead><tr><th>功能</th><th>`git checkout`</th><th>`git switch`</th></tr></thead><tbody><tr><td>切換到已存在分支</td><td>✅ `git checkout branch_name`</td><td>✅ `git switch branch_name`</td></tr><tr><td>建立並切換到新分支</td><td>✅ `git checkout -b new_branch`</td><td>✅ `git switch -c new_branch`</td></tr><tr><td>檢出特定 commit / tag</td><td>✅ `git checkout commit_hash`</td><td>❌ 不支援</td></tr><tr><td>檢出特定檔案版本</td><td>✅ `git checkout commit_hash -- file.txt`</td><td>❌ 不支援</td></tr><tr><td>語意單純性</td><td>❌ 功能太多易混淆</td><td>✅ 專注於切換分支</td></tr><tr><td>推薦使用情境</td><td>老專案 / 習慣舊指令</td><td>新專案 / 想簡化操作</td></tr></tbody></table>

---

## 3️⃣ 使用範例

### 切換到現有分支

```bash
# 傳統方式
git checkout dev

# 新方式（推薦）
git switch dev

```

---

### 建立並切換到新分支

```bash
# 傳統方式
git checkout -b feature/login
# 新方式（推薦）
git switch -c feature/login

```

---

## 4️⃣ 為什麼官方推薦 `git switch`

- 讓指令語意更明確，不再把「檔案檢出」和「分支切換」混在一起。
- 搭配 `git restore`（處理檔案版本還原）更符合直覺：
    
    
    - `git switch` → 專注切換分支
    - `git restore` → 還原檔案內容

---

💡 **簡單記**：

- **切換分支** → 用 `git switch`
- **還原檔案** → 用 `git restore`
- **需要舊版本的行為** → 用 `git checkout`

---

太好了！以下是 `git switch` 和 `git restore` 如何取代舊指令 `git checkout` 的**完整對照表**，讓你更容易理解並開始使用新指令：

---

## ✅ `git checkout` 對照表：對應的新指令用法

<table id="bkmrk-%E5%8E%9F%E6%9C%AC-git-checkout-%E7%94%A8%E6%B3%95-%E5%B0%8D"><thead><tr><th>原本 `git checkout` 用法</th><th>對應的新指令</th><th>功能說明</th></tr></thead><tbody><tr><td>`git checkout <branch>`</td><td>`git switch <branch>`</td><td>切換到已存在的分支</td></tr><tr><td>`git checkout -b <new-branch>`</td><td>`git switch -c <new-branch>`</td><td>建立並切換到新分支</td></tr><tr><td>`git checkout <commit>`</td><td>❌（建議保留 `checkout`）</td><td>切換到某個 commit 狀態（暫不取代）</td></tr><tr><td>`git checkout <file>`</td><td>`git restore <file>`</td><td>還原工作區中的單一檔案</td></tr><tr><td>`git checkout -- <file>`</td><td>`git restore <file>`</td><td>同上</td></tr><tr><td>`git checkout <commit> -- <file>`</td><td>`git restore --source <commit> <file>`</td><td>還原某個 commit 中的檔案</td></tr><tr><td>`git checkout .`</td><td>`git restore .`</td><td>還原所有工作區的檔案</td></tr><tr><td>`git checkout HEAD <file>`</td><td>`git restore --source=HEAD <file>`</td><td>還原最新 commit 的某個檔案</td></tr><tr><td>`git checkout HEAD^`</td><td>❌（建議保留 `checkout`）</td><td>切換到上一個 commit（建議保留舊指令）</td></tr></tbody></table>

---

##  

## 💡 建議做法

<table id="bkmrk-%E4%BB%BB%E5%8B%99-%E5%BB%BA%E8%AD%B0%E7%94%A8%E6%B3%95-%E5%88%87%E6%8F%9B%E5%88%86%E6%94%AF-git-swi"><thead><tr><th>任務</th><th>建議用法</th></tr></thead><tbody><tr><td>切換分支</td><td>`git switch dev`</td></tr><tr><td>建新分支並切過去</td><td>`git switch -c feature/new-ui`</td></tr><tr><td>還原單一檔案</td><td>`git restore src/App.tsx`</td></tr><tr><td>還原某 commit 的檔案</td><td>`git restore --source=abc123 file.txt`</td></tr><tr><td>還原整個工作目錄</td><td>`git restore .`</td></tr></tbody></table>

---

## 🚀 Git 版本要求

- `git switch` 和 `git restore` 需 Git **2.23 或以上**
- 使用 `git --version` 檢查目前版本

---