Git 新手生存指南:從害怕到上手只要 30 分鐘

管管
教學文章 技術分享

Git 是每個開發者的必備技能,但很多人被它的指令嚇到。

「merge conflict」「detached HEAD」「fatal: refusing to merge unrelated histories」——這些錯誤訊息讓新手想直接砍掉重練。

這篇文章用最白話的方式,讓你 30 分鐘內搞懂 Git 的核心概念和常用操作。

Git 是什麼?為什麼要用?

Git 是一個版本控制系統。簡單說,它幫你:

  • 記錄每次修改:像無限次的「復原」功能
  • 多人協作:多個人可以同時修改同一個專案
  • 實驗分支:想試新功能?開個分支,搞砸了也不影響主線

沒有 Git 的世界

project/
├── index_v1.html
├── index_v2.html
├── index_v2_final.html
├── index_v2_final_真的final.html
├── index_v2_final_這次真的是final.html
└── index_v2_final_老闆說改這版.html

有了 Git,你只需要一個 index.html,所有歷史版本 Git 都幫你記著。

核心概念

Repository(倉庫)

一個專案的所有檔案和歷史記錄。分為:

  • Local Repository:在你電腦上
  • Remote Repository:在伺服器上(如 GitHub)

Commit(提交)

一個「存檔點」。每次 commit 就像在遊戲裡存檔,記錄當下所有檔案的狀態。

Branch(分支)

平行宇宙。你可以在不同分支上做不同的事,互不影響。最後可以合併(merge)。

三個區域

Working Directory  →  Staging Area  →  Repository
   (工作目錄)          (暫存區)        (倉庫)

     你正在改的檔案    準備要 commit 的    已經存檔的歷史

安裝與設定

安裝

  • Macbrew install git 或裝 Xcode Command Line Tools
  • Windows:下載 Git for Windows
  • Linuxsudo apt install git

初始設定

# 設定你的名字和 email(會出現在 commit 記錄中)
git config --global user.name "你的名字"
git config --global user.email "your@email.com"

# 設定預設分支名稱為 main
git config --global init.defaultBranch main

基本操作

建立新專案

# 在現有資料夾初始化 Git
cd my-project
git init

# 或從 GitHub 複製(clone)
git clone https://github.com/username/repo.git

日常工作流程

# 1. 查看狀態(常用!)
git status

# 2. 把修改加到暫存區
git add filename.txt      # 加單一檔案
git add .                 # 加所有修改

# 3. 提交(存檔)
git commit -m "簡短描述這次改了什麼"

# 4. 推送到遠端
git push

查看歷史

# 查看 commit 歷史
git log

# 簡潔版
git log --oneline

# 圖形化顯示分支
git log --oneline --graph --all

分支操作

為什麼需要分支?

想像你正在開發一個網站,老闆突然說要加個新功能。你不想在主線上亂改,於是:

  1. 開一個新分支
  2. 在新分支上開發
  3. 完成後合併回主線
# 查看所有分支
git branch

# 建立新分支
git branch feature-login

# 切換分支
git checkout feature-login

# 建立並切換(常用捷徑)
git checkout -b feature-login

# 合併分支(先切回 main)
git checkout main
git merge feature-login

# 刪除分支
git branch -d feature-login

與遠端協作

連接遠端倉庫

# 查看遠端設定
git remote -v

# 加入遠端(通常叫 origin)
git remote add origin https://github.com/username/repo.git

推送與拉取

# 推送到遠端
git push origin main

# 第一次推送設定上游分支
git push -u origin main

# 之後只需要
git push

# 從遠端拉取更新
git pull

常見情境處理

情境 1:不小心改錯了,想復原

# 還沒 add:放棄工作目錄的修改
git checkout -- filename.txt

# 已經 add:從暫存區移除
git reset HEAD filename.txt

# 已經 commit:回到上一個 commit
git reset --soft HEAD~1   # 保留修改
git reset --hard HEAD~1   # 完全丟棄

情境 2:Merge Conflict(合併衝突)

當兩個分支改了同一行,Git 不知道該用哪個,就會產生衝突。

<<<<<<< HEAD
這是你的修改
=======
這是別人的修改
>>>>>>> feature-branch

解決方法:

  1. 手動編輯檔案,決定要保留哪個
  2. 刪除 Git 的標記(<<<、===、>>>)
  3. git add 和 git commit

情境 3:想暫存目前的工作

做到一半要切換分支,但還不想 commit:

# 暫存
git stash

# 切換分支、做別的事

# 取回暫存的工作
git stash pop

情境 4:commit 訊息打錯了

# 修改最後一次 commit 的訊息
git commit --amend -m "新的訊息"

.gitignore

有些檔案不該加入 Git(密碼、編譯產物、node_modules)。建立 .gitignore 檔案:

# .gitignore 範例

# 環境變數(含密碼)
.env

# Node.js
node_modules/

# Python
__pycache__/
*.pyc
venv/

# 編譯產物
dist/
build/

# IDE 設定
.idea/
.vscode/

# 系統檔案
.DS_Store
Thumbs.db

好的 Commit 訊息

格式建議

類型: 簡短描述(50 字以內)

詳細說明(選填,72 字換行)

相關 issue:#123

常用類型

  • feat:新功能
  • fix:修 bug
  • docs:文件更新
  • style:格式調整(不影響程式邏輯)
  • refactor:重構
  • test:測試相關
  • chore:雜事(更新套件等)

範例

feat: 新增會員登入功能
fix: 修正購物車數量顯示錯誤
docs: 更新 API 文件
refactor: 重構訂單處理邏輯

GUI 工具推薦

如果指令讓你頭痛,可以用圖形介面:

  • GitHub Desktop:最簡單,適合新手
  • GitKraken:功能強大,介面漂亮
  • Sourcetree:免費,功能完整
  • VS Code 內建:已經夠用

快速參考表

情境指令
初始化git init
複製專案git clone [url]
查看狀態git status
加入暫存git add .
提交git commit -m "訊息"
推送git push
拉取git pull
新分支git checkout -b [name]
切換分支git checkout [name]
合併分支git merge [name]
查看歷史git log --oneline

結語

Git 的學習曲線確實陡峭,但掌握這些基本操作,日常工作已經足夠。

建議的學習路徑:

  1. 先會 add、commit、push、pull
  2. 學會分支和 merge
  3. 處理 conflict
  4. 探索進階功能(rebase、cherry-pick)

最重要的是:多用多練。搞砸了也沒關係,Git 本來就是讓你不怕搞砸的工具。