LoginSignup
64
43

More than 1 year has passed since last update.

git pull実行時にNot possible to fast-forwardエラーが発生した場合の対応

Last updated at Posted at 2020-09-09

Contents

git pullを実行したときにNot possible to fast-forward, aborting.と表示され、ローカルをリモートリポジトリと同期できなくなった場合の対応方法です。

原因

リモートリポジトリの更新後、git pull(= git fetch; git merge)の前にローカルリポジトリを編集してcommitした場合などに発生するようです。

  • Continuous integration (CI) toolを使った自動コミットが含まれる場合は要注意!
  • Pull requestをmergeした直後は要注意!

解決方法

落ち着いて、次の通りgit fetchgit rebaseを実行すれば副作用を抑えて解決できます1

main branchの場合:

git pull origin main --rebase

Output:

From (remote repositoryのURL)
 * branch            main     -> FETCH_HEAD
Successfully rebased and updated refs/heads/main.

コマンドのイメージ

リモートの変更内容をdiff-A, ローカルの変更内容をdiff-Bとしたとき2 3

ローカル側:

  1. diff-Bをローカルから取り除く
  2. diff-Aをローカルに反映させる
  3. diff-Bをローカルに反映させる

リモート側:

  1. diff-Bをリモートに反映させる

ローカル側もリモート側もdiff-A, diff-Bの順にcommitが設定されます。

あとがき

「一時退避」などでがんばる方法もあると思いますが、履歴が複雑になります(経験談)。履歴を振り返りにくくなるのでrebaseすることをおすすめします。

またリモートとローカルで同じ場所を編集した場合はconflictが発生しますので、そちらも落ち着いて解決しましょう。

お疲れさまでした!

  1. stack overflow: Fatal: Not possible to fast-forward, aborting

  2. git pull --rebaseをpushする前にやろうという話。

  3. git pull と git pull –rebase の違いって?図を交えて説明します!

64
43
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
64
43