← 上一章:【狀況題】怎麼刪除遠端的分支? 下一章:使用 GitHub 免費製作個人網站 →


【狀況題】聽說 git push -f 這個指令很可怕,什麼情況可以使用它呢?

git push -f 這個指令真的令人又愛又恨。愛的是它可以完全無視先來後到的規則,一切以你為主,你推什麼就是什麼,別人之前推的內容都會被無視,就像《權力遊戲》裡 Daenerys Targaryen 騎著她的飛龍大喊「Dracarys!」,怒火燒盡九重天的爽快感!

但恨的就是如果團隊裡有人沒有先知會大家就突然使用這樣的大絕招,你就是被 Dracarys 燒到的那個人,身為隊友的你應該會想把放火的人吊起來打。

所以,這個指令使用請小心,請確定你清楚你在做什麼(建議使用指令前先睡飽八小時以免發生憾事)。

用槍時機

整理歷史紀錄

有時候專案 Commit 的歷史紀錄真的太亂了,想要大刀闊斧的來整頓一下,於是你使用了 Rebase 指令(關於如何使用 Rebase 指令可參閱「修改歷史紀錄」相關章節)。因為 Rebase 等於是修改已經發生的事實,所以正常來說是推不上去的。

這時候就可使用 Force Push 來解決這個問題,但請使用前知會一下跟你同一個專案的隊友,請他們到時候以你這份進度為主。

只用在自己身上

我自己在工作的時候,通常會開一個分支出去做,但做完發現 Commit 太過瑣碎,便會想使用 Rebase 來整理一下這個分支。雖然 Rebase 是修改歷史沒錯,但因為這個歷史影響的範圍只有我自己這個分支,所以並不會影響其它人正常使用:

$ git push -f origin features/my_branch

這樣只會強制更新 features/my_branch 這個分支的內容,不會影響其它分支。

啟動保護機制

但總是有人可能不小心使用了 -f 參數來 Push,GitHub 網站有提供保護機制,可以避免某個分支被 Force Push。請到專案的「Settings」頁籤,左邊選擇「Branches」,接著可以選擇想要保護的分支:

protect branch

勾選你想要保護的選項:

protect branch

完成之後,這個分支就不能被 Force Push 了,甚至連刪除也得先來這裡解除封印才行。

萬一被蓋掉了,救得回來嗎

救回來其實還滿簡單的,就是換你或是其它有之前進度的隊友,再次進行 git push -f 指令一次,把正確的內容強迫推上去,蓋掉前一次的 git push -f 所造成的災難。


← 上一章:【狀況題】怎麼刪除遠端的分支? 下一章:使用 GitHub 免費製作個人網站 →

Comments