リベースを完全にキャンセルする


255

私はこのようなリベースを実行しました:

git rebase --onto master new_background_processing export_background_processing

それは私が望んだことをしなかったので、リセットを実行しました:

git reset --hard HEAD@{1}

ブランチを元の状態に戻しましたが、「git status」と入力すると次のメッセージが表示されました。

# You are currently rebasing branch 'export_background_processing' on 'e378641'.

そのリベースを完全にキャンセルするにはどうすればよいですか?それ自体がどういう意味かわかりません。


16
git rebase --abort
Micha

6
Git 2.12でが提供されるようになりましたgit rebase --quit以下の私の回答を
VonC '28

回答:


408

を使用しgit rebase --abortます。以下からの公式のLinuxカーネルのドキュメントgit rebase

git rebase --continue | --skip | --abort | --edit-todo

5
私の場合、git rebase --abort何かをめちゃくちゃにしたので、うまくいきませんでした。次のエラーのみが発生しました:error: could not read '.git/rebase-apply/head-name': directory of file does not existgit rebase --quit 下記説明は私の問題を解決しました。
Kout

84

適切に中止しなかった過去のリベースの場合、現在(Git 2.12、2017年第1四半期) git rebase --quit

参照してください。9512177コミットにより(2016年11月12日)のグエンタイ・ゴックDuyと(pclouds(合併によりJunio C浜野- gitster-06cd5a1コミットし、2016年12月19日)を

rebase--quitクリーンアップリベースに追加し、その他すべてはそのままにします

進行中のリベースを中止して別の処理に進むことを決めたが、最初に" git rebase --abort" を実行し忘れた場合があります。または、リベースが長い間忘れられていました。(たとえば、別のリベースを開始することによって)それに気付いたときは、すでにあなたのステップをたどるには遅すぎます。解決策は通常

rm -r .git/<some rebase dir>

そしてあなたの人生を続けます。
しかし、2つの異なるディレクトリが存在する可能性があり<some rebase dir>(リベースがどのように機能するかについてある程度の知識が必要であることは明らかです)、 " .git"の部分は、トップディレクトリまたはリンクされたワークツリーにいない場合、はるかに長くなる可能性があります。そして、「rm -r」はで行うのは非常に危険.gitです。そこでミスをすると、オブジェクトデータベースやその他の重要なデータが破壊される可能性があります。

git rebase --quitこの使用例に「」を提供し、「」の前例を模倣しgit cherry-pick --quitます。


Git 2.27(2020年第2四半期)より前は、「git merge --autostash」によって初期ダーティ状態を維持するために作成されたstashエントリが、「」で誤って破棄されgit rebase --quit、修正されました。

Denton Liu()によるcommit 9b2df3e(2020年4月28日)を参照してください。(合併によりJunio C浜野- -3afdeefコミット、2020年4月29日)Denton-L
gitster

rebase:自動保存エントリをstash reflogに保存します--quit

サインオフ:Denton Liu

a03b55530a( " merge:ティーチ--autostashオプション"、2020年4月7日、Gitのv2.27.0 - マージに記載されているバッチ#5)、--autostashオプションが導入されましたgit merge

(「「」git pull保留中の変更を自動的に隠してポップできるか?」を参照)

特に、git merge --quitautostashエントリが存在する状態でを実行すると、stash reflogに保存されます。

これはgit rebase --quit、autostashエントリが単に存在しなくなるという現在の動作とは対照的です。

git merge --quitin の動作を採用しgit rebase --quit、autostashエントリを単に削除するのではなく、stash reflogに保存します。


3
これはgit rebase、:Pのように変更を失う代わりに、の上に変更が加えられたときに作業ディレクトリをリセットするという副作用を回避するのに非常に役立ちます。
好戦的なチンパンジー2017

12

リベースを完了しなかったので幸運ですgit rebase --abort。リベースを完了した場合(履歴を書き換える場合)は、はるかに複雑になります。破損の可能性がある操作(特に履歴の書き換え)を行う前に、ブランチのヒントにタグを付けることを検討してください。


8

あなたがいる場合は、「リベース」「すでに開始リベース」あなたがしたい、キャンセル、ちょうどコメント(#)リベースエディタに表示されているすべてのコミットを。

その結果、コマンドラインメッセージが表示されます

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