iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
Modern Web

Git 起來!每日一招學起來系列 第 8

Day 8:git checkout & git switch —— 穿梭分支與檔案版本

  • 分享至 

  • xImage
  •  

學 Git 的人,大概都經歷過這種時刻:

我只是想切換到另一個分支,結果一個 git checkout,整個檔案內容瞬間改變,好像被拉進了另一個平行時空。

還來不及反應,剛剛辛苦改的東西就「不見了」。

😱 那一刻真的會懷疑人生。

但冷靜一下,其實檔案沒有消失,只是被 Git 暫時收起來。這就是 checkoutswitch 在幹的事 —— 幫你在不同版本之間穿梭。


git checkout 是什麼?

在 Git 裡,git checkout 有兩種用途:

  1. 切換分支:到另一個開發線(branch)。

    git checkout feature/login
    

    👉 就像回到「另一個平行時空」,檔案瞬間換成該分支的狀態。

  2. 還原檔案:把檔案退回到某個版本。

    git checkout HEAD~1 index.html
    

    👉 就像「穿越回昨天」,把 index.html 回復到前一版。

雖然功能強大,但也因為太多用途,常常把新手搞得一頭霧水。


為什麼還有 git switch

Git 開發團隊後來覺得,checkout 太萬能了,大家容易誤用。

於是新增了更直覺的指令:

  • git switch 👉 專門用來切換分支

    git switch feature/login
    
  • git restore 👉 專門用來還原檔案(Day 5 我們講過)

這樣一拆分,switchrestore 分工更清楚,新手也比較不會誤操作。


常見情境

  1. 切換到已存在的分支

    git switch main
    
  2. 建立並切換到新分支

    git switch -c feature/signup
    
  3. 使用舊方法(checkout)也行

    git checkout -b feature/signup
    
  4. 切回上一次所在的分支

    git switch -
    

這個最後一招超好用,常在 mainfeature 分支之間跳來跳去的時候,省下很多打字時間。


情境比喻:平行時空的旅行

如果把專案比喻成一款 RPG 遊戲:

  • 分支 就是平行時空的存檔點
  • checkout/switch 就是讀檔 → 你跳去另一個世界,接續那邊的冒險
  • restore 則是單純把某個道具(檔案)復原,不影響你所在的時空

這樣一來,新手就能快速分辨「我現在到底是在切世界,還是單純修東西」。


實戰場景

  1. 多人協作開發

    • Alice 在 feature/login

    • Bob 在 feature/payment

    • 他們最後會各自合併回 main

      👉 這就是典型的分支並行作業

  2. 嘗試新功能,不影響主線

    git switch -c experiment-ui
    

    在新分支亂改亂試,不喜歡就刪掉,完全不會影響 main

  3. 快速回到穩定版本

    git switch main
    

    立刻切回穩定環境,避免被還沒測完的功能污染。


踩雷小故事 🪤

有一次同事在 main 分支上改了 20 個檔案,還沒 commit 就執行:

git checkout develop

結果切換分支時檔案不相容,Git 把他所有修改「暫藏起來」。

最後他花了一個下午才把東西救回來。

👉 解法:要養成切換分支前先 commit 或 stash的習慣,否則真的很容易翻車。


小挑戰 💪

  1. 嘗試用 git switch -c feature/test 建立一個新分支並切換過去。
  2. 修改檔案但不要 commit,直接 git switch main,觀察會發生什麼事。
  3. 使用 git switch -main 與新分支之間快速切換。

小結

git checkout 是老前輩,功能強大但複雜;

git switch 則是新世代,專注於「切換分支」,更直覺也更安全。

學會這兩招,就能像時間旅行者一樣,在不同版本與分支之間自由穿梭,再也不怕穿越時空迷路。


上一篇
Day 7:git branch —— 認識平行時空
系列文
Git 起來!每日一招學起來8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言