Edited at

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

More than 1 year has passed since last update.


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