web-dev-qa-db-ja.com

Git-「破損した」インタラクティブリベースの修正方法

私は自分のローカルgitリポジトリに小さな混乱を作成することができました。 指示に従う を使用して、壊れたコミットを修正しようとしました。 「git commit --amend」を実行する前(およびgit rebase --interactiveの後)に、変更が間違っていると判断したため、「git reset HEAD --hard」を実行しました。良いアイデアです.

現在、インタラクティブなリベースは「スタック」しているようです。 Gitは現在のブランチを(| REBASE-m)として表示します。リポジトリ内のすべてのコマンド(cd ..、ls、git rebase ...)で次のエラーが発生します。

cat:.git/rebase-merge/head-name:そのようなファイルまたはディレクトリはありません

Git rebase --abortは次のようになります。

$ git rebase --abort
cat: c:/_work/project/src/git/.git/rebase-merge/quiet: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/head-name: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/orig-head: No such file or directory
HEAD is now at 4c737fb Revert "Modified file names"
rm: cannot remove `c:/_work/project/src/git/.git/rebase-merge/done': Permission denied
rm: cannot remove directory `c:/_work/project/src/git/.git/rebase-merge': Directory
not empty
cat: .git/rebase-merge/head-name: No such file or directory

Git rebase --continueの結果は次のとおりです。

$ git rebase --continue
cat: c:/_work/project/src/git/.git/rebase-merge/prev_head: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/end: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/msgnum: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/onto: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/quiet: No such file or directory
prev_head must be defined
cat: .git/rebase-merge/head-name: No such file or directory

何か案は?よく考えたリベース操作を開始する前の状態に、状況をリセットしたいと思います。

Git log --onelineが状況を示す方法は次のとおりです。

4c737fb Revert "Modified file names"
247ac02 Modified file names
33141e6 Message modifications
10a4a04 Modified db script

そしてこれは大丈夫です。

私はmsysgit v1.7.0.2を使用しています。

106
Mikael Koskinen

Gitが.git/rebase-mergeディレクトリを削除しようとしたが、完全に削除できなかったようです。そのフォルダをコピーしてみましたか?また、.git/rebase-applyフォルダーが存在する場合はコピーしてください。

101
Martin Owen

ゾンビvim.exeプロセスが原因で同様の問題が発生しました。タスクマネージャーで強制終了し、その後にgit rebase --abortそれを修正しました。

85
user584317

これにはまりました。 head-nameファイルを作成した後、ontoファイルが見つからないという別のエラーが発生したため、そのファイルを作成しました。その後、anotherエラーが発生し、「。git/rebase-apply/onto」を読み取れませんでした:そのようなファイルまたはディレクトリはありません。

Soリベースのためにgit documentation を見て、git rebase --quitという別のコマンドを見つけました。これにより、ブランチを変更せずに戻すことができ、リベースを最初からやり直すことができました。

52
Laura Slocum

Eclipseでも同じ問題がありました。 EclipseからRebase => abortできませんでした。

git rebase --abortをGit Bashから実行しました。

7

Windowsでは、マシンを再起動したくない、または再起動できない場合は、以下を参照してください。

Process Explorerのインストール: https://technet.Microsoft.com/en-us/sysinternals/bb896653.aspx

プロセスエクスプローラーで、[検索]> [ファイルハンドル]またはDLL ...

エラーに記載されているファイル名を入力します(私のエラーでは「git-rebase-todo」でしたが、上記の質問では「done」です)。

Process Explorerは、ファイルのロックを保持しているプロセスを強調表示します(私にとっては「grep」でした)。

プロセスを強制終了すると、標準の方法でgitアクションを中止できます。

6
Darren Yeats

この名前のファイルを作成します。

touch .git/rebase-merge/head-name

git rebaseを使用するよりも

4
Tehila Dabush

私の場合、エイターgit rebase --abortおよびgit rebase --continueが投げていた:

エラー:「.git/rebase-apply/head-name」を読み取れませんでした:そのようなファイルまたはディレクトリはありません

手動で削除することで、この問題を解決できました:.git\rebase-applyディレクトリ。

3
Dariusz

あなたの答えを@Laura Slocumに感謝します

リベース中に物事を台無しにして、分離されたHEADと

 error: could not read orig-head

そのため、リベースを完了できませんでした。

切り離されたHEADは正確に正しいリベースの望ましい状態を含んでいるようですので、私は走りました

rebase --quit

その後、新しい一時ブランチをチェックアウトして、切り離されたヘッドにバインドしました。

それをリベースしたいブランチと比較することにより、新しいtempブランチがまさに到達したい状態にあることがわかります。ありがとう

3
Ruth

git version 2.19.2.windows.1を使用しています。

私のために働いた唯一のことは、.git/rebase-apply/ディレクトリを削除し、git reset --hardを実行することでした。

1
Spongman

私の場合は、それぞれのGitプロジェクトでSmartGitのログを開き、それぞれのプロジェクトディレクトリでTotal Commanderを開いていたためです。両方を閉じたとき、問題なくリベースできました。

考えれば考えるほど、Total Commander、つまりWindowsがgit rebaseが何かをしようとしていた開いたディレクトリをロックしているのではないかと疑っています。

フレンドリーなアドバイス:何かを修正しようとするときは、常に一度に1つの変更を行ってください。 ;)

1
meridius

Windows上のSublime Text 3では、インタラクティブコミットエディションに使用されるSublimeウィンドウを閉じるだけで問題が修正されます。

1
LeBorgne

X個のコミットのリベースが十分に完了したら、最後のコマンドはgit rebase --continue。これでプロセスが完了し、リベースモードが終了します。

0
diptia

上記のすべての手順を試しましたが、うまくいきませんでした。最後に、再起動コンピューターはこの問題に対処しました:D

0
Mohammed Asif

同じ問題がありました。私は他の投稿で示唆されているようにプロセスエクスプローラーを使用し(その投稿を見つけることができません)、どのプロセスがファイルをロックしているかを見つけてそれを殺します。次に、必要に応じて--continueまたは--abortを実行します

0
user3739537

再起動以外のすべてを試しましたが、私のために働いたのはrm -fr .git/REBASE_HEAD

0
Jeremy Vaught

私の場合、このすべてのオプションをテストした後でも問題が発生した後、Sudo git rebase --abortそして、それは全部やった

0
Dani.Rangelov