MeWrite Docs

Your branch and 'origin/main' have diverged

概要

ローカルブランチとリモートブランチが分岐し、両方に異なるコミットが存在する状態です。単純なプッシュやプルができなくなります。

エラーメッセージ

Your branch and 'origin/main' have diverged,
and have 3 and 2 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

原因

このエラーは以下の原因で発生します:

  1. 別の場所でコミット・プッシュ後、ローカルでもコミット: 複数環境での作業
  2. チームメンバーがプッシュした後、ローカルでコミット: 協働開発
  3. force push後のプル: 他の人が履歴を書き換えた
  4. rebaseやamend後: ローカルで履歴を変更した

解決策

1. マージして解決(推奨)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# リモートの変更をマージ
git pull origin main

# コンフリクトがあれば解決
# ファイルを編集してコンフリクトマーカーを削除

# コンフリクト解決後
git add .
git commit -m "Merge remote changes"

# プッシュ
git push origin main

2. リベースして履歴を整理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# リモートの変更を取得
git fetch origin

# リベース(ローカルのコミットをリモートの後に移動)
git rebase origin/main

# コンフリクトがあれば解決して続行
git add .
git rebase --continue

# プッシュ
git push origin main

3. ローカルの変更を破棄してリモートに合わせる

1
2
3
4
5
# 警告: ローカルのコミットが失われます

# リモートの状態にリセット
git fetch origin
git reset --hard origin/main

4. リモートを上書き(チームの了承が必要)

1
2
3
4
# 警告: リモートの履歴が失われます
# チームで作業している場合は必ず確認を取ること

git push origin main --force

状況を確認する方法

1
2
3
4
5
6
7
8
# ローカルとリモートの差分を確認
git log --oneline --left-right HEAD...origin/main

# < はローカルのみのコミット
# > はリモートのみのコミット

# 視覚的に確認
git log --oneline --graph --all

よくある間違い

  • 確認せずに --force を使用してチームメンバーの変更を消す
  • コンフリクト解決せずにコミットしようとする
  • リベース中に --continue を忘れる

予防策

1
2
3
4
5
6
7
8
9
# 作業開始前に必ずプル
git pull origin main

# こまめにプッシュ
git push origin main

# 長時間の作業は別ブランチで
git checkout -b feature/my-feature
# 作業完了後にマージ

マージ vs リベースの選択

方法メリットデメリット
マージ履歴が保存される、安全マージコミットが増える
リベース履歴がきれい履歴が書き換わる、チーム作業では注意

関連エラー

参考リンク

関連エラー

Git の他のエラー

最終更新: 2025-12-16