push 済みコミットを amend した後 git push が rejected された。理由は?
正答
- amend したコミットは push できない仕様だから
- コミットメッセージがリモートと重複しているから
- ハッシュが変わり、ローカルとリモートの履歴が分岐したから
- リモートが読み取り専用になっているから
解説
amend はコミットを作り直すためハッシュが変わり、リモート側の元のコミットがローカルの履歴に含まれなくなる。Git はリモートの履歴を失う push(non-fast-forward)を既定で拒否する。amend 自体が push 不可なわけではなく、push 前のコミットなら通常どおり push できる。解決策は、push 済みなら amend をあきらめて新しいコミットを重ねること。自分だけのブランチなら --force-with-lease で上書きしてもよいが、共有ブランチでは避ける。
参考: git-scm.com
この問題を含む Git のテストを制限時間つきで解く
Gitクイズへ