兩個檢查全綠的 GitHub pull request 弄壞了 main — 如何用 Require branches to be up to date before merging 來避免
我的習慣是等 pull request 上的檢查全部變綠才合併,所以當我的一個 pull request 在一支它根本沒動過的測試檔上 CI 失敗時,我很意外。 這個失敗跟我的改動完全無關。另一個 pull request 在所有檢查都通過的情況下合併後,main 本身就變紅了,於是每個還開著的 pull request 都因為跟自己無關的原因跟著變紅。壞掉的 main 背後還藏著一個真正的 bug,而且還沒有任何測試跑到它。 被合併的那個 pull request 的檢查結果沒有錯,只是過時了。那些檢查是在另一個 pull request 合併之前跑的,而被合併的這個 pull request,正好弄壞了另一個 pull request 新增的程式碼。GitHub 的 _Require branches to be up to date before merging_ 會讓這種合併等到 CI 重新跑過。 本文說明兩個綠燈的 pull request 如何疊出一個紅燈的 main,以及除了這項設定之外,main 還值得加上哪些規則。
閱讀更多