- PROGRESS.md 是「專案成果」,進 git 被追蹤,是給人看的正式文檔。
- worktree-log 是「便條紙」,不進 git,只給Claude 冷啟動秒懂用途。
- 「合併 tree 到 master」不是搬資料夾,是把支線的 commit(改動記錄)接到主幹歷史線上。
- 合併完才能安全刪 tree,沒合併就刪 = commit 變孤兒、改動消失。
- 文件系統(git 追蹤)和記憶系統(
.claude/)各走各的路,git 合併不會動記憶。
Thomas 剛才在 D:\Backup\Downloads 處理 12 個 worktree,做了一輪 git merge → worktree remove → branch -D,做完了心裡還有幾個問號:
- 「PROGRESS.md 和 worktree-log 不是一樣的嗎?」
- 「合併不是把資料夾搬進去嗎?」
- 「為什麼要先合併才能刪?」
- 「我動了 git,Claude 的記憶會不會被動到?」
這頁就是把這 4 個問題一次講清楚。
這些是接下來會反覆出現的詞。不用背,滑到不懂再停下來看即可。
.git/ 隱藏資料夾,那就是它的大腦。這是 Thomas 剛才最混淆的一點:「這兩個 md 檔案不是差不多嗎,為什麼一個要合併一個不用?」
答案:它們根本是兩套獨立系統。
📘 PROGRESS.md(成果文檔)
- 放在 worktree 的專案資料夾裡
- 被 git 追蹤,會進 commit
- 寫完
git add+commit才算完事 - 給人看的:總結做了什麼、為什麼這樣做
- 會進入歷史線、永久存在
- 合併到 master 後,master 也會有這份檔案
📝 worktree-log(便條紙)
- 放在
.claude/worktree-logs/ - 不進 git(.gitignore 或根本不在 repo 裡)
- 改完存檔就完事,沒 commit 這回事
- 給 Claude 看的:這 tree 是幹嘛的、當前狀態
- tree 刪了這檔也可以跟著刪,用完即棄
- 跟 merge 完全無關
worktree-log 像是「桌上便利貼」,寫「這隔間是做 X 項目的,現在進度 70%」,貼給下一個接手的同事看。工作結束就撕掉,不進檔案庫。
一個是成果,一個是便條;
一個永久、會被所有拉這個 repo 的人看到,一個用完即棄、只活在本機 .claude/ 裡。
所以今天做的操作:只需要把 PROGRESS.md 這類被 git 追蹤的檔案合併進 master。worktree-log 從頭到尾沒進 git,不需要也不能被「合併」。
常見誤解:「合併 = 把資料夾搬進主資料夾」。不對。
正確理解:合併是把支線的 commit(改動記錄)接到主幹歷史線上。資料夾不會動,改變的是「歷史線的形狀」。
🌳 樹狀圖看合併
🔑 三個關鍵認知
合併改變的是「歷史線」,不是資料夾位置
資料夾 sharp-brown/ 從頭到尾都在原處,沒被搬進 Downloads/ 主 repo。改變的是:master 分支現在指向 M,而 M 的「祖先」包含了支線的 commit X。
合併後,master 的「檔案內容」才會多出支線的檔案
因為 X 這個 commit 有「新增 PROGRESS.md」這個動作,合併後 master checkout 出來的工作目錄,自然也就有 PROGRESS.md 了。
--no-ff 強制產生合併點 M
如果不加 --no-ff,在「master 沒前進、支線單獨跑」的情況下,git 會快進:直接把 master 指針從 D 推到 X,不產生 M。歷史線變成直的。
加 --no-ff 就算能快進也強制產生 M,歷史上留下「這裡合併了一個支線」的明顯記號,日後好追蹤。
沒合併就刪 = commit 變孤兒。branch 刪掉 = 支線的「書籤」沒了,X 這個 commit 沒人指著,就變成 orphan commit,git 一做垃圾回收(gc)就真的消失了。
合併後刪 = 安全。支線的 commit X 已經被 M 這個合併點「收編」進 master 的歷史鏈,就算 branch 書籤刪掉、worktree 資料夾刪掉,master 鏈條上還留著 X 的身影,PROGRESS.md 永遠找得回來。
背景:D:\Backup\Downloads 是個 repo,裡面有 12 個 worktree。其中 sharp-brown/ 這個 tree 在 branch claude/2026-04-10-desktop-cc-questions 上,比 master 多 1 個 commit(新增 PROGRESS.md 183 行)。目標:把這 1 個 commit 吸收進 master,然後清掉 tree 和 branch。
📋 完整命令序列
# 1️⃣ 站到 master(主 repo 目錄) cd D:/Backup/Downloads git checkout master # 2️⃣ 把支線合併進來(產生合併點 M) git merge --no-ff claude/2026-04-10-desktop-cc-questions \ -m "merge sharp-brown: add PROGRESS.md" # 3️⃣ 移除 worktree 資料夾(git 層面的清理) git worktree remove sharp-brown # 4️⃣ 刪掉 branch 書籤(支線已被吸收,書籤無用) git branch -D claude/2026-04-10-desktop-cc-questions
Step 3(worktree remove):把分身工作間的門鎖上、拆掉
Step 4(branch -D):把「支線書籤」丟進垃圾桶——反正支線的 commit 已經在主幹鏈上了,書籤沒用了
🎯 這之後發生了什麼
- master 目錄下出現了
PROGRESS.md(183 行) sharp-brown/資料夾從硬碟消失claude/2026-04-10-desktop-cc-questions這個 branch 名字不存在了- 但 master 的歷史鏈
git log裡,永遠能看到 X 這筆 commit 的記錄
最後釐清這個重要區分:剛才的 git 合併完全沒動到 Claude 記憶。
📁 文件系統(git 管轄)
- PROGRESS.md、程式碼、設定檔
- 被
git add追蹤 - 進 commit、上 GitHub
- 合併時會搬動
- 給人看、給程式跑
🧠 記憶系統(.claude/)
- MEMORY.md、worktree-log.md、CLAUDE.md
- 在
.claude/資料夾下 - 通常被
.gitignore排除 - 合併時動不到
- 給 Claude 冷啟動讀
今天做的 git merge → worktree remove → branch -D,三步都只動 git 管轄的文件。
Claude 的記憶(MEMORY.md、worktree-log)自己獨立一套,git 操作不會碰它們。要更新記憶得另外開 Claude、用對應工具。
兩套系統互不交叉:文件是「實體成果」,記憶是「AI 的燃料」。別把它們混為一談。
worktree remove 了,怎麼救?git worktree remove 只是拆資料夾,branch 書籤還指著 X,X 還活著。重新開一個 worktree 到同 branch(git worktree add 路徑 分支名)就能拿回檔案。但如果已經
branch -D 把 branch 也刪了,就要靠 git reflog 在 30 天內找 commit ID,過了 gc 就真沒了。有里程碑意義、日後可能要回看「這波改動整體做了什麼」→ 用 --no-ff 留下合併點。Thomas 今天的 PROGRESS.md 算成果交付,用 --no-ff 對的。
git worktree list 看目前有哪些。rm -rf sharp-brown/?要用 git worktree remove?.git/worktrees/ 裡有註冊表記錄「我派了一個分身叫 sharp-brown,在路徑 X」。直接 rm -rf 會留下失效註冊項,git worktree list 會出現殘影。必須用 git worktree remove(或之後 git worktree prune)來清註冊表。git checkout 某個commit ID(不是 branch 名),就會進 detached HEAD。在這狀態下做的 commit 沒 branch 保護,一切走就變孤兒。今天操作全程都在有 branch 的狀態,安全。.git/(主 repo 裡的那個)。所以所有 git 操作其實都是在動主 repo 的歷史,worktree 只是給你一個乾淨的工作目錄而已。