diff --git a/src/lib/gitrepo.js b/src/lib/gitrepo.js index 2e3e6f9..7eda1e1 100644 --- a/src/lib/gitrepo.js +++ b/src/lib/gitrepo.js @@ -133,9 +133,12 @@ function resolveMergeBase(cwd, baseRef) { // 資料驅動的補抓策略:先以固定深度分批加深 base 與 HEAD(每步後重試 merge-base,成功即回傳); // 只有仍失敗且為淺層 repo 時,才把成本最高的 --unshallow(下載完整歷史)當最後手段, // 避免大型/長壽 repo 只為找共同祖先就無謂拉全史。 + // 加深 HEAD 側須以「目前 HEAD 的 commit SHA」補抓——遠端符號 `HEAD` 由伺服器解析為 + // 遠端預設分支(非目前 checkout 的 PR head),只加深它並不會補到 PR head 的歷史。 + const headSha = gitTrim(cwd, 'rev-parse', 'HEAD'); const strategies = [ ['deepen base', 'fetch', '--no-tags', '--deepen=1000', 'origin', `+refs/heads/${baseRef}:refs/remotes/${remoteBase}`], - ['deepen HEAD', 'fetch', '--no-tags', '--deepen=1000', 'origin', 'HEAD'], + ['deepen PR HEAD', 'fetch', '--no-tags', '--deepen=1000', 'origin', headSha], ]; if (gitTrim(cwd, 'rev-parse', '--is-shallow-repository') === 'true') { strategies.push(['unshallow', 'fetch', '--no-tags', '--unshallow', 'origin']);