0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Git】間違って git rebase -i したのを元に戻す方法

Posted at

はじめに

git rebase -i は、複数のコミットをまとめたり、削除したりできる便利なコマンドですが、操作を間違えて意図しない変更をしてしまうこともあります。
そんなときでも git reflog を使えば、元の状態に戻すことが可能です。
この記事では、 git rebase -i の操作を取り消す方法を紹介します。

1. git reflog

git reflog は、自分がgitで行った操作の履歴を確認することができます。

% git reflog
fe660f5 (HEAD -> feature, origin/feature) HEAD@{0}: rebase (finish): returning to refs/heads/feature
fe660f5 (HEAD -> feature, origin/feature) HEAD@{1}: rebase (pick): foo
fa475c1 HEAD@{2}: rebase (pick): bar
7165a76 HEAD@{3}: rebase (pick): baz
4a5d436 HEAD@{4}: rebase (pick): qux
fc15899 HEAD@{5}: rebase (pick): quux
da27275 HEAD@{6}: rebase (pick): corge
60154e8 HEAD@{7}: rebase (start): checkout HEAD~7
c84852d HEAD@{8}: checkout: moving from main to feature

下に表示されているものほど古い履歴です。
今回の例では、HEAD@{0}からHEAD@{7}までリベース操作が行われていて、HEAD@{8}はmainブランチからfeatureブランチへ切り替えています。

2. git reset --hard HEAD@{n}

git reset --hard HEAD@{n}は、自分がgitで行った操作を戻します。

nには git reflog で確認した戻りたい履歴の番号を指定します。
先ほどの git reflog の例ならば、 git reset --hard HEAD@{8} を実行するとリベース操作前に戻るので、 git rebase -i の操作を無かったことにできます。

さいごに

私自身、 git rebase -i で「あ、しくった...」という状況に何度か陥ったことがあります。
そのたびに git reflog で履歴をさかのぼってやり直すことで助かったので、今回その方法を記事にまとめました。
なお、リモートリポジトリに既にpushしている場合は git push --force が必要になります。
ただし、強制プッシュは他のメンバーの作業を壊す可能性があるため、慎重に使用してください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?