Git
GitHub

git push -f をやめて --force-with-lease を使おう

TL;DR

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

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

--force-with-lease とは

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

エイリアスに登録する

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

terminal
# ~/.gitconfigに追加
$ git config --global alias.push-f "push --force-with-lease"

terminal
$ git push-f origin master

force push問題

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

同じブランチで複数人開発していた場合
タイミングによっては 「◯◯さんのコミットを吹き飛ばしちゃった//」 が発生する可能性が十分ある。

そもそも上記の運用方法に問題がある気はするが、どんな運用をしていたとしても
force pushする際は --force-with-leaseオプションを必ずつけるようにしておいて損はないと思う。

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

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

enter image description here