git push を強制する -f (–force)と –force-with-lease

最終更新:2018-07-14 by Joe

git push を強制するオプションと、リモート強制更新時の注意点です。

git push を強制するオプション「-f, --force」

リモートの履歴が指定したローカルブランチより進んでいれば、履歴同士の競合により、エラーで push は失敗してしまいます。

それでも、無理やりリモートの履歴を上書きするには、git push は「-f」オプションで強制できます。

// git pushを強制するオプション (2つは同義)
git push -f origin master
git push --force origin master

git push -f によりブランチを上書きする時の注意点

強制 push は、自分ひとりで作業しているブランチでは、それほど問題にならないでしょう。一方で、チームで開発を行っているとき、共有されたブランチを強制更新するときは注意が必要です。

もし上書きにより、消されてしまったコミットを起点にして、チームメンバーがローカルで開発を進めていたとすると、そのようなメンバーが次回の push で必ず競合が発生してしまうだけでなく、すでに存在しない状態をベースに機能開発を進めてしまうため、すべての前提が崩れてしまう可能性さえあります。

チームメンバーが多いほど、このような問題は発生しやすいのではないでしょうか。共有されたブランチはできるだけ、強制上書きは避けるべきでしょう。

ブランチ更新日付が新しい時だけ強制する「--force-with-lease」

git push --force と似ていますが、ローカル側の履歴がリモートの履歴よりも新しいときだけ強制します。

そもそも強制上書き時点を判断する前に、消して良い履歴かどうかをチェックをすべきですので、このオプションの仕様に上書きを実行しても、いかにも間違いが発生しそうですね・・。

git push の強制に関する参考情報

git push の仕様はこちらにも詳しくまとめています。

またこちらの記事では「push の取り消し」について、まとめました。