2016年 07月 28日

安全な git push -f

TL;DR

git push -fをやめて --force-with-leaseを使いましょう!

$ git push --force-with-lease origin master

force pushヤバイ理由

rebaseなどの作業の際、強制PUSHが必要なタイミングが出てくるが --forceでは
ローカルの内容を破壊的にリモートレポジトリを上書きしてしまう。

そうなった場合、 「◯◯さんのコミットを吹き飛ばしちゃった/// てへぺろ☆」 が発生し、大惨事となる。

--force-with-lease とは

PUSHの際、ローカルのrefとリモートのrefを比較しローカルが最新か確認。
最新でなければ、PUSHは失敗するというもの。
(※ただし、直前にfetchしているとPUSHが成功してしまうので注意)

エイリアスに登録する

--force-with-lease とか長すぎるので、エイリアスに登録する

$ git config --global alias.push-f "push --force-with-lease"
[alias]
push-f = push --force-with-lease

$ git push-f origin master

ブランチを削除できないようにする

消されるとやばいブランチは [Settings] → [Protected branches]に追加しましょう

ss.png

最後に

歴史を改ざんすることは神の所業です。我々平民は気をつけて改ざんしましょう!

おわり

Yoshida e070c695df5d4bbe8e6b800136356dbfb59e78836e5658e2b5f4e4e33df4a66d
Ryo

グルメ旅とお酒が大好きなプログラマー
大阪界隈の勉強会運営もやってます。
趣味はボルダリング

follow us in feedly このエントリーをはてなブックマークに追加