危険察知4 択難易度 標準

状況

ローカルで rebase してから main に push したら拒否された。作業者がすぐに次のコマンドを打とうとしている。

Enter の前に止めるべき点は?

$ git push origin main ! [rejected]        main -> main (non-fast-forward)$ git push -f origin main

正答

  1. -f ではなく --force と長いオプションで書くべき
  2. 先に git push --dry-run で送られる内容を確かめれば -f してよい
  3. push の前に git gc で不要なオブジェクトを消すべき
  4. remote の main にある他人のコミットを上書きして消してしまう

解説

non-fast-forward で拒否されたのは、remote の main に手元にないコミットがあるか、rebase で履歴を書き換えたため。-f はそれを無視して remote の main を手元の内容で上書きし、他の人が push したコミットが main から消える。git fetch で差分を確かめ、git pull --rebase などで取り込んでから通常の push をする。共有ブランチの履歴は書き換えない。--dry-run は送る内容を見るだけで、他人のコミットが消えることは変わらない。

参考: git-scm.com

gitpushforce

この問題を含む 危険察知 のテストを制限時間つきで解く

危険察知クイズへ