Claude Code 用 PR 連結找回會話 — 貼一個網址,跳回三天前那段對話
先別管怎麼把對話找回來。先問一個更基本的問題:當你關掉 Claude Code,那段對話跑去哪了?
大部分人腦中的模型是「聊天視窗」——開著就在,關了就沒。但這個模型會害你找不到東西。實際上,一個 session 不是視窗,是一個躺在你硬碟上的檔案。路徑長這樣:
1 | ~/.claude/projects/<project>/<session-id>.jsonl |
<project> 是從你的工作目錄路徑衍生出來的,.jsonl 裡每一行是一個 JSON 物件——一句你的話、一次工具呼叫、一段 metadata,照順序疊上去。你工作的時候,Claude Code 就一行一行往這個檔案寫。所以「恢復會話」這四個字,拆開來看一點都不玄:它就是把這個檔案重新讀回記憶體,接著上次的最後一行繼續。
理解這層,後面所有東西都會變簡單。我們從這個檔案開始往上蓋。
第一層:怎麼把某個檔案重新讀回來
既然 session 是檔案,問題就變成「我要哪一個檔案」。Claude Code 給了一排入口,由模糊到精準:
1 | claude --continue # 恢復這個目錄最近的那一個 |
--continue 最省事,但它只認「最近」,你昨天開了五個 session,它只給你最後碰的那個。--resume 會開一個 picker 讓你翻——問題來了,翻什麼?如果你當初沒給 session 取名字,picker 上就是一排你認不出來的東西。
這就是大多數人卡住的地方:不是找不到,是「不知道哪個是哪個」。
第二層:給檔案貼標籤,未來的你會感謝你
解法之一是養成命名習慣。命名的時機有好幾個,挑順手的用:
1 | claude -n auth-refactor # 一開始就取名 |
進行到一半想起來還沒命名,就在對話裡打 /rename auth-refactor;在 picker 裡highlight 到某個 session,按 Ctrl+R 也能改名。還有個貼心的:在 plan mode 接受一份 plan 的時候,如果這個 session 還沒名字,它會自動拿 plan 的內容當名字。
picker 本身也比想像中聰明。打開後按這幾個鍵會差很多:
- 任何一個字(或
/)→ 進搜尋模式,開始 filter Ctrl+A→ 把你本機所有專案的 session 都列出來Ctrl+W→ 列出同一個 repo 各個 worktree 的 sessionCtrl+B→ 只看你現在這個 git branch 的 sessionSpace或Ctrl+V→ 預覽某個 session 的內容再決定
但命名這招有個前提:你得記得命名。而人就是會忘。所以真正漂亮的解法,是用一個你「本來就會留下」的東西當鑰匙——不用你額外動手記的東西。
第三層:用一個你本來就會產生的東西當鑰匙
你想想,每次做完一個功能,最後幾乎都會做同一件事:開 PR。那個 PR 有一個全世界唯一的網址。如果這個網址能反過來指回「當初是哪段對話開出它的」,問題不就解了嗎?你完全不用記任何東西,因為 PR URL 本來就在那。
這正是 v2.1.122(2026 年 4 月底那週)加進來的機制。關鍵在開 PR 的那個動作——當你在某個 session 裡用 gh pr create 開 PR 時,Claude Code 會偷偷記下一條連結:「這個 PR,是這個 session 生出來的。」這條對應關係它幫你存著。
於是恢復就變成貼網址。在 picker 裡:
1 | > /resume |
然後直接把 PR 網址貼上去(貼上的第一個字元就會自動進搜尋模式,所以不用先按什麼):
1 | https://github.com/your-org/your-repo/pull/1234 |
picker 會 filter 出開這個 PR 的那個 session,Enter,回到三天前的對話現場。嫌 picker 麻煩?命令列一行直接跳過它:
1 | claude --from-pr 1234 |
而且不只 GitHub——GitHub Enterprise、GitLab、Bitbucket 的 PR / merge request 網址都吃。
拆完機制,它的邊界也一起浮出來了
把上面三層疊起來看,這個功能能用、不能用的情況,幾乎是自己長出來的,不用另外背:
它必須是 gh pr create 開的 PR。 因為連結是在那個動作發生的當下被記下來的。你如果是跑去 GitHub 網頁上按按鈕開的 PR,Claude Code 根本不在場,沒記到這條連結,事後貼網址當然反查不到。這不是 bug,是機制的直接後果。
反查的範圍綁在當前專案目錄(含它的 git worktrees)。 在別的地方開的 session,這裡找不到,會跟你說 No conversation found。
transcript 預設 30 天清掉。 太久沒回來的對話,那個 .jsonl 可能已經被清走了——畢竟它是檔案,檔案會被回收。想留久一點,調 cleanupPeriodDays。反過來,如果你開了 --no-session-persistence,或設了 CLAUDE_CODE_SKIP_PROMPT_HISTORY,那它根本不寫檔案,自然也沒得恢復。
看出來了嗎?這些「限制」其實全是同一件事的回音——session 就是一個會被產生、會被連結、會被清掉的檔案。你只要記住這個本質,每一條規則都不用死背,現場推就推得出來。
順帶補一個容易踩的細節:--resume <name> 跟對話裡的 /resume <name> 行為不一樣。名字不唯一時,前者會開 picker 並把搜尋字串預填好,後者直接報錯——要不帶參數的 /resume 才會乖乖開 picker。
學到這,你手上其實已經有一整套「跨時間管理 AI 對話」的地圖了:session 是檔案(持久化)、命名與 picker 是索引(怎麼找)、PR URL 是免記憶的鑰匙(用既有產物反查)。下一個值得順著摸的,是 /cd(v2.1.169 起能把 session 搬到新目錄而不重燒 cache)和 claude project purge(整包清掉某專案的 transcript)。它們跟今天這條線是同一個世界觀——當你不再把對話當成「關掉就消失的視窗」,而是當成「會被存、被搬、被清的檔案」,整個 Claude Code 的 session 系統就從一團黑盒,變成你能調度的東西。
參考來源:Claude Code — Manage sessions、Claude Code What’s New — Week 18(2026-w18)、CLI Reference










