開発ブログ

WWWクリエイターズが送る、Git、CSS、HTML、コマンドライン、Macの便利機能など、開発に関する役立ち情報発信します。気まぐれに更新。

git pushを強制するオプションと、注意事項まとめ。

最終更新:2017-07-03 by Joe

git pushで、リモートにpushしたいのに、コンフリクトで怒られてできない!そんな時の強制手段です。

git push を強制するオプション

git pushは-fオプションで強制できます。

※git pushの引数なしは、「上流ブランチ(upstream branch)」が設定されていれば動作します。上流ブランチ設定は「git branch -vv」で確認できます。

設定されていない場合、下記のコマンドで、同名の上流ブランチを設定できます。

参考:git マニュアル:git push

git push -f する時の注意

通常、チームで開発していると、みんなが参照するブランチ(例えばmasterブランチ)があるはずです。

があなたの都合でmasterを勝手に強制上書きすると、他のメンバーの人がfetchしてローカルに落としたmasterの履歴と、リモートにあるmasterの履歴が異なってしまいます。

それを、あなたの先輩が気づかずに、古いmasterに徹夜して重要な修正をたくさん追加して、ローカルで入念にテストして、朝方くたくたになって、Pushすると・・・、コンフリクトがででています・・。あなたが勝手に歴史を書き換えたからです。

先輩は、存在しない歴史(=消された古いコミット)の上に自分の変更をたくさん積み重ねてしまったため、リベースが大変です。あなたは、次の日、説教部屋に呼び出されてしまいました。。

今回は、先輩とあなたの間だけの話でしたが、チームの規模が大きくなればなるほど、このような事件に巻き込まれれる人や、被害が増えてしまいます。

git push -f は、通常のチームでの共有しているブランチに対しては行っては行けません。

もし共有ブランチの修正の必要が生じたら、できるだけ歴史を書き換えることなく、その修正を「新しいコミット」にして、追加Pushして下さい。そうすれば、チームメンバーが、その修正コミットだけを後からマージし易いはずです。

git push 強制に関する参考リンク

とはいえ、一人で開発していると、ばしばし上書きしてしまいます。歴史はきれいな方が気持ちいいですからね。。

それでは、楽しいgit ライフを。