表題の通り慌てたので、備忘録。
経緯
ブランチで作業してからrabaseした後、問題ないかと思ってリポジトリにpushしたが、
間違いが判明し、戻したくなった。ある程度作業した後にrebaseするとrebase元のコミットとごちゃごちゃになってしまう。
これの対応方法は別途調べるとして、結果から言うと下記で戻しました。
git reflog
git reset --hard HEAD@{番号}
git push -f origin ブランチ名
git reflog
履歴やブランチの切り替え履歴を参照できる。
git resetを行うとgit logでは履歴が消えてしまうが、git reflogでは履歴が残る。
git reset --hard HEAD@{番号}
--hard
「HEADの位置・インデックス・ワーキングツリー」全てが対象
最後のコミットの状態に戻す
他のオプションとして、
オプション | 対象 | 使用例 |
---|---|---|
--mixed | オプションを指定しない場合はデフォルトでこれになる。「HEADの位置・インデックス」が対象 | addを取り消したい時など |
--soft | 「HEADの位置」のみ | コミットのみ削除など |
HEAD@{番号}はgit reflogで確認できる
git push -f origin ブランチ名
強制的にpushする
※共有されたブランチで使用する場合には要注意。
以上です。
いいねやQiitaやTwitterのフォローいただけると励みになります!
他にも方法がありましたら、コメントお待ちしております。
宜しくお願いします〜
参考
git pull と git pull –rebase の違いって?図を交えて説明します!
【 git revert/git reset 】コマンド――コミットを取り消す
git push を強制する -f (–force)と –force-with-lease
[git reset (--hard/--soft)]ワーキングツリー、インデックス、HEADを使いこなす方法