git pushのforce-if-includesオプション
--force-if-includes について以下のブログで初めて知ったのでメモ
git push -f が更に安全になる –force-if-includes - id:onk のはてなブログ
git push –force-with-lease
push --froce-with-lease すると origin/main ブランチにいつのまにか新しいコミットが積まれていた場合、以下のように怒ってくれる(上記記事からの引用)
$ git push --force-with-lease origin HEAD
To github.com:onk/foo.git
! [rejected] HEAD -> main (stale info)
error: failed to push some refs to 'github.com:onk/foo.git'
ローカルには、main や origin/main の他に remotes/origin/main という追跡ブランチがあり、追跡ブランチが origin/main より古いと上記のように怒られる
追跡ブランチは git fetch で origin/main と同期される
追跡ブランチと origin/main が揃っていると push --force-with-lease は成功するので、pushする前に git fetch すると 他の人がリモートブランチに積んでいたコミットを守ってくれなくなる
git push –force-if-includes
--force-if-includes は追跡ブランチと origin/main が揃っていても reflogを見て追跡ブランチがアップデートされていることをチェックしてpushできないようにしてくれる
--force-with-lease ではpushできてしまっていた、push前に git fetch で両ブランチを揃えたパターンでもpushできなくなるため、より安全にpushできるようになった