9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

git push --force-with-leaseでpushを強制する

Last updated at Posted at 2021-03-11

#目次

  • はじめに
  • 使用環境
  • 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コマンドはチーム開発では、使う際には充分気をつけた方がいいみたいですね。

9
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?