Part 1
核心概念:用白板比喻說清楚
Git 和 GitHub 是版本控制的兩個不同東西。很多人搞混,先搞清楚這個最重要。
白板比喻
想像你有一塊公共白板(GitHub),掛在客廳裡。你和朋友各自有自己的筆記本(本地電腦),在不同地方寫筆記。
Push(推上去):把你寫的筆記拍照,上傳到白板
Pull(拉下來):把白板上別人剛更新的內容,下載到你手上
Git vs GitHub 關係圖
本地電腦 A
你的筆記本
→ Push →
GitHub
雲端公共白板
← Pull ←
本地電腦 B
朋友的筆記本
三個核心詞彙
Git(工具)
記錄每次改動歷史的程式。就像你筆記本裡的修改紀錄——誰改了什麼、什麼時候改的,全都有記錄。
安裝在你電腦上的軟件
安裝在你電腦上的軟件
GitHub(平台)
微軟旗下的雲端倉庫平台。用來存放 Git 記錄,讓多台電腦或多人同步同一份文件。
你放筆記的雲端白板
你放筆記的雲端白板
Push 和 Pull 的方向
Push = 上傳
本機 → GitHub
「把我的改動推上去」
工作完成後用
「把我的改動推上去」
工作完成後用
Pull = 下載
GitHub → 本機
「把最新版本拉下來」
開始工作前用
「把最新版本拉下來」
開始工作前用
Part 2
為什麼要先 Pull 再 Push?
這是最多人踩的坑。不先 pull 就 push,會讓別人的改動「消失」。
覆蓋比喻
白板上寫著「蘋果」。你朋友加了「香蕉」,更新了白板,現在白板是「蘋果、香蕉」。但你不知道他已經更新了,你還以為白板只有「蘋果」,你加了「橙子」然後直接覆蓋上去——「香蕉」就消失了!
錯誤示範:不先 pull 的後果
GitHub 白板:「蘋果」 電腦 A 改成:「蘋果、香蕉」 電腦 A push ✅ 推上去了 電腦 B 以為還是「蘋果」 電腦 B 改成:「蘋果、橙子」 電腦 B push ❌ 結果: 「香蕉」消失了!
正確做法:先 pull 再 push
GitHub 白板:「蘋果」 電腦 A push「蘋果、香蕉」✅ 電腦 B 先 pull ← 拿到最新版 電腦 B 現在有:「蘋果、香蕉」 電腦 B 加上自己的 → 「蘋果、香蕉、橙子」 電腦 B push ✅ 結果: 三個都保留了!
Git 的保護機制
好消息是:Git 不會讓你靜默覆蓋別人的改動。如果你忘記 pull 就 push,Git 會直接拒絕你,並提示你先 pull。
# 忘記 pull 直接 push,Git 會提示:
$ git push
! [rejected] main -> main (fetch first)
error: failed to push some refs
hint: Updates were rejected because the remote contains work that you do not have locally.
hint: Integrate the remote changes (e.g. git pull ...) before pushing again.
# 意思是:GitHub 上有你沒有的改動,先 pull 再說
記住這個規則
開始工作前 → pull(拿最新)
工作完成後 → add → commit → push(推上去)
就像每天上班前看一下公共白板,下班前把今天的工作寫上去。
工作完成後 → add → commit → push(推上去)
就像每天上班前看一下公共白板,下班前把今天的工作寫上去。
Part 3
實際場景:多台電腦同步 Claude Code 記憶
你有台式機、筆記本、手機,三台設備都想拿到最新的 Claude Code 記憶,怎麼做?
三設備同步流程圖
台式機
今晚新記憶
筆記本
也有新記憶
手機
想拿全部
↓ 正確做法 ↓
Step 1
台式機 push
→
GitHub
有台式機的記憶
↓
Step 2
筆記本先 pull
←
GitHub
筆記本拿到台式機記憶
↓ 筆記本加入自己的記憶 ↓
Step 3
筆記本 push
→
GitHub
有兩台的記憶了
↓
Step 4
手機 pull
←
GitHub
手機拿到完整記憶
具體命令步驟
# === 台式機 ===
台式機 $ git add -A
台式機 $ git commit -m "今晚新增的記憶和設定"
台式機 $ git push
GitHub 現在有:台式機記憶 ✅
# === 筆記本 ===
筆記本 $ git pull # 先拿台式機的
筆記本現在有:台式機記憶 ✅
... 做自己的工作,新增記憶 ...
筆記本 $ git add -A
筆記本 $ git commit -m "筆記本的記憶"
筆記本 $ git push
GitHub 現在有:台式機 + 筆記本記憶 ✅
# === 手機 ===
手機 $ git pull
手機現在有:台式機 + 筆記本完整記憶 ✅
Thomas 的實際用途
Claude Code 的記憶存在
每次 push 到
換電腦時 git pull 就能恢復所有 AI 記憶,就像換了部手機還是同一個你。
D:\Backup\Downloads\claude-sonnet-4-6\memories\ 裡。每次 push 到
thomastangnz-commits/downloads-config(私人 repo)後,換電腦時 git pull 就能恢復所有 AI 記憶,就像換了部手機還是同一個你。
Part 4
常用命令表:六個就夠用
Git 有幾百個命令,但日常 90% 的情況只需要這六個:
| 命令 | 意思 | 什麼時候用 |
|---|---|---|
git pull |
從 GitHub 下載最新版本到本機 | 開始工作前,確保拿到最新 |
git status |
查看哪些文件有改動,哪些等待上傳 | 隨時查看,像看購物清單 |
git add -A |
把所有改動標記為「準備上傳」 | push 前,把東西放進購物籃 |
git commit -m "說明" |
給這次改動貼說明標籤,存成一個版本 | push 前,替這批改動取個名字 |
git push |
把本機推上 GitHub | 工作完成後,上傳到白板 |
git log --oneline |
查看歷史 commit 清單(簡潔版) | 想看之前存了什麼版本 |
git status 怎麼看
輸入 git status 後,你會看到這樣的輸出:
$ git status
On branch main
Your branch is up to date with 'origin/main'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
modified: memories/MEMORY.md # 已修改,還沒 add
Untracked files:
(use "git add <file>..." to include in what will be committed)
memories/new-lesson.md # 新文件,還沒 add
# 用 git add -A 後,再看 status:
Changes to be committed:
modified: memories/MEMORY.md # 準備好了
new file: memories/new-lesson.md # 準備好了
commit 說明怎麼寫
Commit 的說明沒有嚴格規定,但寫清楚能幫你以後查找。建議格式:
# 好的 commit 說明範例
git commit -m "Add Gmail API lesson and update memory index"
git commit -m "更新 CLAUDE.md 加入 Alpaca 查詢模板"
git commit -m "Fix: 修正 OAuth token 路徑設定"
# 不建議的(太模糊)
git commit -m "update"
git commit -m "改了東西"
Part 5
標準工作流程:每次用 Claude Code 後
把這個流程背下來,形成習慣。就像寫完筆記要夾進去、隨手按保存。
1
開始工作前:git pull
確保你手上的版本是最新的。如果另一台電腦昨晚有 push,你現在就能拿到那些改動。
2
做你的工作(用 Claude Code 等)
正常工作,這步不需要任何 Git 操作。
3
工作完成後:git add -A
把所有改動過的文件放入「購物籃」,準備打包上傳。
4
給這次改動取名:git commit -m "說明"
替這批改動加一個說明標籤,記錄這次做了什麼。未來回看時能快速找到。
5
推上 GitHub:git push
上傳完成。其他設備現在可以 pull 拿到最新版本。
# 完整標準流程(複製貼上即用)
# 開始前
git pull
# 做完工作後
git add -A
git commit -m "今天做了什麼"
git push
# 確認成功
git status
# 應該顯示:
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
Thomas 的備份觸發時機
根據你的備份規則:每次修改
可以直接在 VS Code 左側 Source Control 圖示操作,不用記命令。
CLAUDE.md 或 .claude/memories/ 後,就跑一次完整流程。可以直接在 VS Code 左側 Source Control 圖示操作,不用記命令。
Part 6
術語卡片:Git 小白必懂的名詞
第一次接觸 Git,很多詞聽起來都很像。這裡用白話文解釋每個術語。
Git
版本控制工具
記錄文件每次改動歷史的程式。安裝在你電腦上,不是網站。
GitHub
雲端代碼平台
微軟旗下,用來放 Git 倉庫的雲端平台。就是那個「公共白板」。
Repository (Repo)
倉庫
一個項目的所有文件 + 所有歷史記錄的集合體。私人倉庫只有你自己看得到。
Commit
存檔(快照)
一次「存檔」操作,附帶說明文字。像遊戲的存檔點,可以隨時回到任意存檔。
Push
推送(上傳)
把本機的 commit 上傳到 GitHub。方向:本機 → 雲端。
Pull
拉取(下載)
把 GitHub 上的最新版本下載到本機。方向:雲端 → 本機。
Branch
分支
像樹的分叉。可以在不影響主線(main)的情況下,另開一條線試驗新功能。
main / master
主分支
預設的主要分支名稱。新版 Git 用 main,舊版用 master,功能一樣。
Merge
合併
把兩條分支的改動合在一起。通常用於把試驗分支的成果合回主線。
Conflict(衝突)
版本衝突
兩台電腦都改了同一行,Git 不知道用哪個,需要人工手動選擇保留哪個版本。
Local
本地(本機)
就是「你自己電腦上的」。Local repo 就是你電腦裡的倉庫。
Remote / Origin
遠端(雲端)
GitHub 上的那份。origin 是預設的遠端名稱,通常就是 GitHub repo 的位置。
Clone
克隆(複製)
把 GitHub 上的 repo 完整複製到本機。通常只做一次,之後用 pull 更新即可。
.gitignore
忽略清單
告訴 Git「這些文件不要管」。密碼、API Key、超大文件夾都應該寫進去排除。
Part 7
常見問題 FAQ
Pull 的時候會不會把我的東西刪掉?
不會。Git 會智能合併,只要你和 GitHub 上改的不是同一行,兩邊的改動都會保留。
只有「兩邊都改了同一行」才會出現衝突(Conflict),這時候 Git 會暫停並請你手動選擇用哪個版本。
只有「兩邊都改了同一行」才會出現衝突(Conflict),這時候 Git 會暫停並請你手動選擇用哪個版本。
忘記 pull 直接 push 怎麼辦?
Git 會自動拒絕你,不會讓你靜默覆蓋別人的改動。
它會顯示錯誤訊息,提示你先
Pull 的時候 Git 會嘗試合併,大部分情況下自動搞定,不需要你手動處理。
它會顯示錯誤訊息,提示你先
git pull,然後再 git push。Pull 的時候 Git 會嘗試合併,大部分情況下自動搞定,不需要你手動處理。
多久 push 一次比較好?
每次完成一個重要任務後就 push,就像隨手按保存。不需要「存夠多了才推」。
對 Thomas 來說:每次修改
對 Thomas 來說:每次修改
CLAUDE.md 或記憶文件後就 push 一次,養成習慣比什麼都重要。
git add -A 和 git add . 有什麼差?
git add -A:追蹤所有改動,包括刪除的文件git add .:追蹤新增和修改,舊版 Git 不追蹤刪除日常用
git add -A 就對了,更全面。
commit 之後反悔了,可以撤銷嗎?
可以,但要謹慎。
還沒 push 的 commit:用
已經 push 的 commit:不建議強制修改,除非你是這個 repo 的唯一使用者
最安全的做法是:新建一個 commit 來「反向修復」,而不是刪除歷史記錄。
還沒 push 的 commit:用
git reset HEAD~1 撤銷最後一次 commit(保留文件改動)已經 push 的 commit:不建議強制修改,除非你是這個 repo 的唯一使用者
最安全的做法是:新建一個 commit 來「反向修復」,而不是刪除歷史記錄。
.gitignore 文件要怎麼用?
在 repo 根目錄建立一個叫
Thomas 的 repo 裡會忽略:
這些文件不應該上傳到 GitHub,一是太大,二是有安全風險。
.gitignore 的文件,每行寫一個要忽略的路徑。Thomas 的 repo 裡會忽略:
.venv/(852MB 的 Python 虛擬環境)node_modules/(npm 套件)*.token(OAuth token 文件).env(密碼文件)這些文件不應該上傳到 GitHub,一是太大,二是有安全風險。
VS Code 裡可以不用命令列操作 Git 嗎?
可以。VS Code 左側有一個「Source Control」圖示(三個圓點加連線的那個),點進去就能:
· 看所有改動的文件
· 輸入 commit 說明
· 點按鈕 commit + push
底部狀態欄的 ↑↓ 同步箭頭可以一鍵完成 pull + push。
不想記命令的話,VS Code 圖形介面就夠用了。
· 看所有改動的文件
· 輸入 commit 說明
· 點按鈕 commit + push
底部狀態欄的 ↑↓ 同步箭頭可以一鍵完成 pull + push。
不想記命令的話,VS Code 圖形介面就夠用了。
AI 可以自動幫我 push 嗎?
不行,而且不應該讓 AI 自動 push。
根據 Thomas 的備份規則:AI 只能 commit,push 必須由你手動執行。
原因是:一旦 push 到錯誤的 repo 或不小心公開了私密文件,後果很難補救。
AI 可以幫你準備好 commit,但最後的 push 要你自己按。
根據 Thomas 的備份規則:AI 只能 commit,push 必須由你手動執行。
原因是:一旦 push 到錯誤的 repo 或不小心公開了私密文件,後果很難補救。
AI 可以幫你準備好 commit,但最後的 push 要你自己按。