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


184

私はなんとかローカルの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を使用しています。


58
git rebase --quit私のために働いた
フアンCaicedo

回答:


160

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


7
ご指摘いただきありがとうございます。コンピュータを再起動するだけで問題を解決できました。どういうわけか、.git \ rebase-mergeフォルダーへのすべてのアクセスが「アクセス拒否」エラーを引き起こしたため、何が問題だったかわかりません。
ミカエルコスキネン

19
再起動は機能しませんでしたがgit rebase --abortstackoverflow.com/a/4757777/146044から)機能ました。
2016年

3
git shell(windows)を再起動するだけでgit rebase --abort
うまくいき

4
警告の言葉...破損したリベースエラーに気付いたとき、作業ディレクトリに4時間分の変更がありました。git rebase --abortステージングされていない変更を消去してみました...エラーは消えましたが
ジョージアナンダエマン

117
再起動するか、git rebase --abortそれでもエラーが発生しました。git rebase --quit私のために働いた。
フラビオロドリゲス

198

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

だから私はリベースのためのgit ドキュメントを見て、別のコマンドを見つけました:

git rebase --quit

これにより、変更なしでブランチに戻り、リベースを最初からやり直すことができました。


51
git rebase --quitそれでした!
Steven Shaw

5
--quit働いた。--abortリベースが途中でキャンセルされたからではありませんでした
Kalob Taulien

1
エラーメッセージが異なるだけで、リベース関連の同様のエラーが発生しました。試してみました:$ git rebase --abort出力:error: could not read '.git/rebase-apply/head-name': No such file or directory最後に、この解決策で問題が解決しました:git rebase --quit
aff '14

賛成。git rebase --quit絶対に助かった 説明したのと同じ症状ですがgit pull --rebase、何らかの理由で失敗したを実行した後、私の症状が現れました。注:autostashを有効にし(gitバージョン2.27.0.windows.1)、同時にVS2019を実行しました(そのリポジトリを指しています)。これらのいくつかの組み合わせが混乱していると思われます。
ErrCode

90

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


これも私の問題でした。私はsysinternals handleコマンドを使用して、プロセス(sh.exe)がファイルをロックしているのを見ました。pskill <pid>私のためにそれを修正して使用しました。
ポールオリバー

同じ問題がありましたが、Sublime Textを使用しました。
ToivoSäwén

35

あなたの答えをありがとう@Laura Slocum

私はリベース中に物事を台無しにし、デタッチされたヘッドを手に入れました

 error: could not read orig-head

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

デタッチされたHEADには、正しいリベースの望ましい状態が正確に含まれているようなので、実行しました

rebase --quit

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

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


7

Eclipseでも同じ問題がありました。Eclipseからリベース=>中止できませんでした。

git rebaseの実行-Git Bashからのアボートは私のために働きました。


7

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

プロセスエクスプローラーのインストール:https : //technet.microsoft.com/en-us/sysinternals/bb896653.aspx

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

エラーで言及されたファイル名を入力します(私のエラーの場合は「git-rebase-todo」でしたが、上記の質問では「完了」)。

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

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



3

私の場合は8歳git rebase --abortgit rebase --continue投げていました:

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

手動で削除することにより、この問題をなんとか修正しました:.git\rebase-applyディレクトリ。


2

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

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


1

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

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

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


1

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


1

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


0

X回のコミットのリベースが問題なく完了したら、最後のコマンドは次のようになりますgit rebase --continue。これでプロセスが完了し、リベースモードが終了します。


0

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


0

私の場合は、まだ持つ問題点をすべてこのオプションをテストした後、私が試したsudo git rebase --abortし、それが全体のことをしました


実際のリベースの最中にこれを行う場合は注意してください。変更を失った: '(
Freeman L

それは「破損している」と見なされたので、リベースからやり直します
Dani.Rangelov


0

以下の状態になり、リベースが機能しなくなった場合、

$ git status
rebase in progress; onto (null)
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

次に、最初の実行、

$ git rebase -quit

そして、reflogから以前の状態を復元し、

$ git reflog
97f7c6f (HEAD, origin/master, origin/HEAD) HEAD@{0}: pull --rebase: checkout 97f7c6f292d995b2925c2ea036bb4823a856e1aa
4035795 (master) HEAD@{1}: commit (amend): Adding 2nd commit
d16be84 HEAD@{2}: commit (amend): Adding 2nd commit
8577ca8 HEAD@{3}: commit: Adding 2nd commit
3d2088d HEAD@{4}: reset: moving to head~
52eec4a HEAD@{5}: commit: Adding initial commit

使用して、

$ git checkout HEAD@{1} #or
$ git checkout master #or
$ git checkout 4035795 #or

-3

私はEclipseでgitを使用していますが、同じ問題が発生していました。

やがて、「Rebase ...」メニューエントリが一時的にサブメニューに変換されることがわかりました。

チーム->リベース->中止

それは私のために働いた。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.