Bo2SS

Bo2SS

5. Git集成使用禁忌

39 | 禁止向集成分支執行 push -f 操作#

-f /--force:強制更新

場景:在本地和遠端不是 fast-forwards 關係時,本地本來是不允許推送到遠端的,但是,如果使用 git push -f 命令,就可以將本地強制更新到遠端。

演示:強制抹掉遠端的 commit。

先看看目前遠端的 commit 記錄:

image

以及本地的 commit 記錄:

image

此時我們將本地版本重置到之前的某一個 commit,如 f21c98a,執行git reset --hard f21c98a ,然後再看一下本地的 commit 記錄:

image

發現其之後的 commit 記錄已經消失。

此時再進行推送:

image

直接 git push 肯定是不行的,但是加了 -f 之後成功推送了,再來看看遠端的 commit 記錄:

image

No!如果你是遠端的另一個開發人員,看到這裡會是什麼感受?

那麼有什麼機制防止執行這種操作呢?可以自行搜索一下,Github 和 Gitlab 都提供了相應的保護機制。

📢此外,還可以通過 git reflog 找回剛剛丟失的分支,如下圖紅框所示:

image

然後利用 git reset --hard HAED@{n} 恢復喔~

40 | 禁止向集成分支執行變更歷史的操作#

團隊裡公共的分支嚴禁做 rebase 操作

比如:

同事 A 通過 rebase 變更 commit 的 message 並推送到遠端:

image

他在兩個 commit 的 message 裡加了 [feature] 前綴。

而另一位同事 B 在他變更前,就已經基於 origin/temp 分支同樣創建了 test_rebase_inter 分支,並提交了 2 次新的 commit:

image

此時這位同事 B 想推送自己的更新,一定會遇到問題。

並且後面每一位已經在開發 test_rebase_inter 分支的同事都會遇到這個問題,他們還需要再用 rebase 來處理,這樣帶來了很多不必要的麻煩。

或者,找到同事 A,讓他恢復原狀,具體方法可參考上一節提到的 git reflog 方式。


rebase 適用場景之一:在還沒有推送到遠端的情況下,通過 rebase,把自己在本地的多次 commit,合併成一次 commit,再推送。

集成開發,銘記兩點:不 push -f;不變更遠端歷史。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。