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 の取り消し」について、まとめました。