#目次
- はじめに
- 使用環境
- git push を強制するオプション「-f, --force」
- ブランチ更新日付が新しい時だけ強制する「--force-with-lease」
- 終わりに
#はじめに
Railsチュートリアルローカル環境にて進めており、一区切りついたのでpushしようとしたら以下のようなエラーが出ました。色々試しましたが、どうにもpushできず、恐らくmacOSをバージョンアップしたことによる何らかのエラーで、GitHubにcommitすら反映されていませんでした。
$ git push origin master
To https://github.com/xxx/xxx.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/xxx/xxx.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
#使用環境
macOS BigSur 11.2.2
ruby 2.6.6
Rails 6.0.3
git version 2.30.1
Visual Studio Code(エディタ)
#git push を強制するオプション「-f, --force」
調べてみると、無理やりリモートの履歴を上書きするには、git push は「-f」オプションで強制できるみたいで、
// git pushを強制するオプション (2つは同義)
git push -f origin master
git push --force origin master
#ブランチ更新日付が新しい時だけ強制する「--force-with-lease」
--force-with-lease とは、pushの際、ローカルrefとリモートrefを比較しローカルが最新か確認。最新でなければ、pushは失敗するというもの。
git push --force と似ていますが、ローカル側の履歴がリモートの履歴よりも新しいときだけ強制するみたいです。
幸い今回開発しているのは自分一人だけで、macOSのバージョンアップ前に一度しかpushしていなかったので、以下を実行して強制pushを試みました。
$ git push --force-with-lease origin master
すると無事pushが成功してGitHubにも反映されていました!めでたし。
#終わりに
色々調べてみると、上記の強制pushコマンドはチーム開発では、使う際には充分気をつけた方がいいみたいですね。