Git – リモート – push時エラー~no-fast-forward

概要

  • ローカルでの作業結果をリモートにpushしようとしたとき、その間に他のユーザーがリモートに変更を加えていると、エラーになりpushできない
  • そのようなときは、リモートからpullまたはfetch & mergeで変更内容をローカルにマージし、その結果をpushする

準備

リモートリポジトリーの準備

あらかじめ空のリモートリポジトリーexampleを準備しておく。以降、これに対してローカルで2人のユーザーを想定して変更を加える。

user1の作成とクローン

ローカルでuser1ディレクトリーを作成し、そこにリモートリポジトリーをクローンして移動。

ローカルのログ。

 

同様にuser2ディレクトリーを作成し、そこにもリモートリポジトリーをクローンして移動。

ログはuser1と同じ内容。

user1によるコミット・プッシュ

user1で新規ファイルを作成してコミット。

ローカルのログには新たなコミットが加わっている。

この内容でリモートにプッシュする。リモートには新たなコミットが追加されるが、user1側のローカルには反映されない。

user2によるコミット・プッシュ・エラー

現時点でuser2のローカルリポジトリーの内容がリモートと異なっている状態で、user2でファイルを作成・コミット。

user2のローカルのログでは、user1のコミットは当然反映されていない。

この状態でuser2からコミット結果をプッシュしようとすると、リモートリポジトリーがその後の作業結果を含んでいるので更新できない、とエラーになる。

対応処理

このようなエラーの場合、リモートの内容をgit pullするか、フェッチ後にマージする。ここではfetch & mergeで進める。

フェッチ

まずリモートの内容をフェッチ。

フェッチされたリポジトリーFETCH_HEADに移動。

フェッチされた内容のログ。user2クローン後のuser1による変更が記録されている。

マージ

mainブランチに移動

作業中のmainブランチにフェッチされた内容をマージ。このマージはno-faseet-forwardになるので、エディターが立ち上がる。

マージ後のログ。user1user2のコミットが含まれ、マージコミットが加わっている。

git log --graphでも確認。

プッシュ

マージされた内容で、改めてプッシュ。

リモートへの繁栄の確認

プッシュ後のリモートの内容をuser1でプル。

user2のコミットも反映されている。

ログも最終状態になっている。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です