Watch at Ease看見世界,讀懂生活。

科技 · 實用指南

Git變基跳過提交?重放前先審核修補程式

提交雜湊被跳過不等於程式碼遺失。先區分上游等價修補、重放後為空、手動跳過與GitHub合併限制,再改寫歷史。

原創示意圖區分自動上游等價省略、重放變空與手動跳過。
原創編輯示意圖:各階段分別核證,非真實倉庫截圖。 Watch at Ease

Git報告跳過已套用提交時,先把改動與實際變基的目標上游比較。預設變基可省略上游已有的乾淨挑選修補,即使提交ID不同。不要只為恢復舊提交數量而加參數重跑。

指南圍繞原始頂點、目標頂點及確切跳過修補建立證據記錄,並區分本地Git行為與GitHub拉取請求按鈕。警告本身不能診斷託管平台的合併限制。

記錄操作並找回原始頂點

保存完整警告、跳過ID、原始命令、Git版本與目標分支。執行`git status`確認變基是否仍在進行。自動已套用警告、重放後為空與手動跳過衝突提交是不同事件,應記錄實際是哪種,不要都叫遺失提交。

變基完成後查看`git reflog show --date=iso YOUR_BRANCH`,以真實分支名替換YOUR_BRANCH,按操作順序辨認原始頂點。記下確切舊雜湊及目標雜湊,不假設固定reflog索引總是所需狀態。reflog是本地記錄且可能到期;原始物件不可用時,停止並尋找其他保留副本。

針對正確上游檢查修補等價

以記錄的上游和原始分支頂點執行`git cherry -v UPSTREAM_HASH OLD_TIP_HASH`,將名稱替換為已核雜湊。減號表示上游存在等價修補,加號表示沒找到。Git文檔的比較忽略空白及行號,不是比提交訊息或舊ID。也要閱讀實際跳過修補;標記是等價證據,不證明全部預期結果。

命令只檢查已提交修補,不含未提交編輯,也不能證明後續提交沒有撤銷改動。檢查相關檔案與預期行為。本站在隔離Git 2.51.1樣例中確認挑選過的功能標減號、變基時省略,但最終檔案保留;另一未匹配提交也保留。有限示例不代表測試了你的倉庫。

比較序列,再決定是否重放

操作完成且基點、頂點明確時,查看`git range-diff OLD_BASE_HASH..OLD_TIP_HASH NEW_BASE_HASH..NEW_TIP_HASH`,以實際範圍替換四個占位符。結合上游修補比較閱讀未匹配與變更條目。新主題範圍缺少修補,可能是它已在新基點;缺一條不等於程式碼遺失。range-diff是供人閱讀的比較輸出,非恢復命令或穩定機器驗收格式。

Git說明`--reapply-cherry-picks`改變的是對乾淨上游等價修補的預先省略。重放提交仍可能為空,由`--empty`控制該階段。兩者均不保證恢復行為。確實發現缺失時,先保留目前工作並確認所需歷史再恢復,不以再次變基、硬重設或強推作診斷。

把GitHub按鈕當作獨立分支

本地變基成功但GitHub拒絕Rebase and merge時,收集拉取請求基點、頂點雜湊、提交數與確切平台訊息。當前GitHub倉庫限制文檔將此方式限定100個提交。超限是可核實的獨立條件;未超限亦不證明其他合併要求已滿足。沒有證據,不認定本地跳過警告造成平台拒絕。

每項預期改動都應有說明:已由上游承載、明確決定移除或仍需審核恢復。檢查最終檔案和專案必要驗證,再依允許的合併策略處理平台限制。保留新舊頂點、命令、跳過ID、比較與未解釋改動交給維護者。關閉提示或恢復提交數量不是驗收。

原創示意圖展示原始頂點、修補比較、最終檔案及平台限制核查。
原創排查示意圖:修補標記不代替最終行為驗收。 Watch at Ease