Git

【Git】強制プッシュ時はpush -fではなく–force-with-leaseを使おうという話

Github

 

今回は強制プッシュする際はpush -fではなく、–force-with-leaseを使おうという話をしたいと思います。強制プッシュをせざるを得ない場合はいくつかありますが、その際にpush -fを打ち込むことは金輪際やめておきましょう。

自分への戒めとしても記事を残しておきます笑

【前提】強制プッシュをする場面

強制プッシュをする場面としては主に以下の2つが挙げられます。これら以外は基本的に強制プッシュしないことが前提になります。

  • rebaseを実行し、リモートに反映させる場合
  • コンフリクトをローカル上で修正し、リモートに反映させる場合

強制プッシュする際のコマンド

強制プッシュをする際は、push -fではなく–force-with-leaseを使用します。push -fはあらゆるコードを上書きしてしまうため使用しないようにしましょう。

% git push --force-with-lease origin ブランチ名

 

–force-with-leaseオプションは最後にfetchしたタイミングで成否を判断しているため、他人のコードを上書いてしまいコードを抹消するといった事例を防ぐことができます。

–force-with-lease alone, without specifying the details, will protect all remote refs that are going to be updated by requiring their current value to be the same as the remote-tracking branch we have for them.

参照: the git push documentation

最後にfetchしたタイミングで成否を判断しているということは、強制プッシュ前にfetchを行っていると弾くことはできないので注意しましょう。

# 以下のパターンは通ってしまう

% git fetch origin ブランチ名
% git push --force-with-lease origin ブランチ名

まとめ

強制プッシュする際は、push -fではなく–force-with-leaseを使用する

参考

 

 

今回は強制プッシュする際はpush -fではなく、–force-with-leaseを使おうという話をしました。これまで強制プッシュをpush -fで実行していた場合は、今日から–force-with-leaseを使用してプッシュするようにしましょう。