Gitエラー解決: fatal: It seems that there is already a rebase-merge directory

intermediate📦 Git2026-06-06| Git 2.x以降を使用しているすべてのオペレーティングシステム(Linux、macOS、Windows)。

Error Message

fatal: It seems that there is already a rebase-merge directory, and I wonder if you are in the middle of another rebase. If that is the case, please try git rebase (--continue | --abort | --skip) If that is not the case, please rm -fr ".git/rebase-merge"
#git#rebase#rebase-merge#トラブルシューティング#gitエラー

Gitのリベースが停滞状態(Limbo)に陥ったとき

フィーチャーブランチで作業を進め、mainと同期する準備が整いました。git rebase mainを実行しますが、履歴がクリーンになる代わりにGitが処理をブロックします。rebase-mergeディレクトリが既に存在するというエラーが表示され、技術的な行き詰まり状態になってしまいます。

これは、以前のリベースが完了しなかった場合に発生します。面倒なマージコンフリクトの途中で作業を中断したり、ターミナルがクラッシュしたり、コマンドの実行中にノートパソコンのバッテリーが切れたりした可能性があります。Gitは現在「ゾンビ」状態にあります。アクティブに作業していなくても、Gitはまだリベース中であると思い込んでいます。

fatal: It seems that there is already a rebase-merge directory, and I wonder if you are in the middle of another rebase.  If that is the case, please try
	git rebase (--continue | --abort | --skip)
If that is not the case, please
	rm -fr ".git/rebase-merge"

根本原因:.gitフォルダに残った記録

リベースを開始すると、Gitは.gitフォルダ内に隠し一時ディレクトリを作成します。通常、名前は.git/rebase-mergeまたは.git/rebase-applyになります。このフォルダはスクラッチパッド(一時的な作業領域)として機能し、head-nameontoorig-headなど、どこから開始してどこへ向かっているのかを追跡するための10〜15個のメタデータファイルを保存します。

リベースが完了すると、Gitはこのフォルダを自動的に削除します。しかし、プロセスが外部から強制終了されたり、リベースが「アクティブ」な状態で手動でブランチを削除したりすると、これらのファイルが残ってしまいます。新しくリベースを開始しようとすると、Gitはそのフォルダを見つけて、重要な作業を上書きしないように処理を停止します。

ステップ1:現在の状態を確認する

破壊的なコマンドを実行する前に、Gitが何が起きていると認識しているかを確認しましょう。次のコマンドを実行します。

git status

Gitがまだリベースの途中であると認識している場合、出力は以下のようになります。

rebase in progress; onto 1a2b3c4
You are currently rebasing branch 'feature-branch' on '1a2b3c4'.
  (fix conflicts and then run "git rebase --continue")
  (use "git rebase --abort" to check out the original branch)

ステップ2:最もクリーンな終了方法(git rebase --abort)

これを修正する最も安全な方法は、中断されたリベースを破棄するようGitに指示することです。これにより、リポジトリは問題が発生する前の元の状態に戻ります。以下を実行してください。

git rebase --abort

このコマンドはHEADをリセットし、.git/rebase-mergeディレクトリを消去します。通常、これでエラーは即座に解消され、99%のユーザーにとって最適な最初のステップとなります。

ステップ3:手動での削除(--abortが失敗する場合)

まれに、リポジトリの状態が非常に混乱し、git rebase --abortを実行しても「No rebase in progress(リベースは進行中ではありません)」というメッセージで失敗することがあります。しかし、「rebase-merge directory already exists」というエラーは消えません。この特定のシナリオでは、一時ディレクトリを手動で削除する必要があります。

LinuxまたはmacOSの場合:

rm -rf .git/rebase-merge

注:エラーメッセージにrebase-applyと明記されている場合は、代わりにそのフォルダを削除してください。

Windows(PowerShell)の場合:

Remove-Item -Recurse -Force .git/rebase-merge

Windows(コマンドプロンプト)の場合:

rd /s /q .git\rebase-merge

このディレクトリがなくなれば、Gitはリベースが進行中であると認識しなくなります。これで自由に新しいgit rebaseを開始できます。

ステップ4:確認

再試行する前に、環境がクリーンであることを確認します。

  • git statusを実行します。リベースの警告がなく、クリーンなブランチステータスが表示されるはずです。
  • リベースを再開します:git rebase main

よくある特殊なケース

1. 複数のワークツリー

git worktreeを使用している場合、別のフォルダで同じブランチに対してリベースを実行している可能性があります。Gitはデータの破損を防ぐためにこれらの操作をロックします。他のプロジェクトフォルダを確認して、そこでターミナルがコンフリクトの解消を待っていないか確認してください。

2. ロックされたファイル

Windowsでは、VS CodeやIntelliJなどのIDEが.gitフォルダ内のファイルをロックすることがあります。rm -rfが「Permission Denied(アクセス拒否)」エラーで失敗する場合は、エディタを閉じてからコマンドを再試行してください。ゾンビ状態のリベースが残り続けるには、ファイルが1つロックされているだけで十分です。

学んだ教訓

  • 「X」ボタンで閉じない: コンフリクトの最中にターミナルをそのまま閉じないでください。完了させるか、明示的に--abortを実行しましょう。
  • 分かりやすいプロンプトを使用する: Oh My ZshやStarshipなどのシェルテーマは、コマンドラインに(REBASE 1/5)のように表示できます。これにより、リベースの途中であることを忘れることがなくなります。
  • 手動削除は安全: rebase-mergeフォルダを削除しても、その特定のリベース試行の進行状況が破棄されるだけです。実際のコミットやソースコードは影響を受けません。

Related Error Notes