git rebase
を元に戻すための非常に簡単な方法は、ブランチラベルを元に戻すことです。
現在のversion2
ブランチのヒントを放棄したい場合は、git reflog
(あなたのように)から開始できます。私もここにrebase
ステップが含まれる、と私はいくつかの「本当の」略し参照文献に残しておきます:ブランチのHEAD
があった場所。ここ
$ git checkout branch
$ git rebase --onto master start-after branch
... rebase output ...
# oops! dag-nab-it! didn't mean to do that!
$ git reflog
<rev..> [email protected]{0}: rebase finished: returning to refs/heads/branch
<rev..> [email protected]{1}: rebase: some commit msg...
05f7dc8 [email protected]{2}: rebase: checkout master
aa4e140 [email protected]{3}: checkout: moving from master to branch
aa4e140
です。これはORIG_HEAD
でもご覧になれます。
は
$ git log -1 --oneline ORIG_HEAD
aa4e140 some commit msg...
(あなたは、あなたが適切な場所に行っていることを確認する必要がある場合は、ログのより多くを使用しています。)
あなたには、いくつかの他のgitのをやった場合リベース後のもの、ORIG_HEAD
が移動した可能性がありますが、reflogは正しい値を持ちます。 ORIG_HEAD
とreflogに表示されている内容が一致する場合は、間違いなく正しい値を持っています。いずれにしても、適切な値が設定されていることを確認してください(保存されていない変更はありません。git status
はクリーンです)。必要に応じてgit stash
を使用してください。
また、version2
というラベルの履歴が表示されるgit reflog version2
もお試しください。
は今ちょうど現在のそれはまだあなたが変更-にターゲットたいものだと確信し、分岐がメイク強制コミット:
$ git branch
... see that you're still on "branch" or "version2" or whatever
$ git reset --hard aa4e140
ほら、物事が戻って正確にあなたがgit rebase
を実行する前に彼らがいた方法です。
あなたがORIG_HEAD
を変更するために何もしていない場合、それはすべてこれよりもさらに簡単です:
$ git log ORIG_HEAD # make sure that's what you want
...
$ git branch # make sure you're on `version2`
...
$ git reset --hard ORIG_HEAD
HEAD is now at ...
しかしreflog
方法がより一般的な(リベース後の月についてのために働く、どんなにですその間にやったこと)。
は(ここでは期間は設定可能です。git reflogマニュアルを参照してくださいデフォルトの30日間の有効期限はREFLOGエントリのために通常より古いコミットの場合で、「ブランチの現在の先端から到達できません」です。 。リベース前)
この作業の理由を理解への鍵は単純です:git rebase
は古いコミットを保持します。 はコミット・グラフに新しいコミットを追加した後、というラベルを移動します。ラベルを移動すると、古いコミットを見るのが難しくなります。既定では表示されず、「reflog」にしか表示されませんが、まだそこに残っています。ラベルを元に戻し、新しいコミットは表示されないもので、古いものはすべて戻ってきます!
あなたはそれについて私の答えで読むことができます[@での "記号" /記号/文字はGitの意味ですか?](http://stackoverflow.com/questions/17910096/what-does-the- git/17910097#17910097)、最後のセクション。 –