fix(resolveMergeBase): deepen HEAD 改以目前 HEAD 的 SHA 補抓 PR head 歷史
原策略 fetch 遠端符號 HEAD,會被伺服器解析為遠端預設分支, 只加深預設分支歷史、補不到目前 checkout 的 PR head,淺層時仍可能算不出 merge-base。 改先 rev-parse 取得 HEAD 的 commit SHA,以該 SHA 加深 PR head 側歷史。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
d354f30c27
commit
83dd56f37f
+4
-1
@@ -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']);
|
||||
|
||||
Reference in New Issue
Block a user