1. ホーム
  2. git

[解決済み] git reset」を元に戻すには?

2022-03-19 02:43:36

質問

元に戻す最も簡単な方法は何ですか。

git reset HEAD~

現状、考えられるのは git clone http://... をリモートレポから取得します。

解決方法は?

簡単にお答えします。

git reset 'HEAD@{1}'

長い回答です。

Git は、すべての ref 更新(チェックアウト、リセット、コミット、マージなど)のログを保持しています。それを見るには、次のように入力します。

git reflog

このリストのどこかに、あなたが失ったコミットがあります。例えば、あなたが今、次のように入力したとしましょう。 git reset HEAD~ で、それを元に戻したい。私のリブログはこんな感じです。

$ git reflog
3f6db14 HEAD@{0}: HEAD~: updating HEAD
d27924e HEAD@{1}: checkout: moving from d27924e0fe16776f0d0f1ee2933a0334a4787b4c
[...]

1行目には、次のように書かれています。 HEAD 0ポジション前(つまり現在位置)は3f6db14で、これをリセットして得られたのが HEAD~ . 2行目には、次のように書かれています。 HEAD 1ポジション前(言い換えればリセット前の状態)はd27924eです。これは特定のコミットをチェックアウトして得られたものです(今はそんなことは重要ではありませんが)。そこで、リセットを元に戻すには、次のように実行します。 git reset HEAD@{1} (または git reset d27924e ).

一方、それ以降に HEAD を更新するようなコマンドを実行した場合、目的のコミットはリストの最上位にはありません。 reflog .

最後にもうひとつ。 reflog よりも、リセット解除したい特定のブランチ (たとえば master) の HEAD :

$ git reflog show master
c24138b master@{0}: merge origin/master: Fast-forward
90a2bf9 master@{1}: merge origin/master: Fast-forward
[...]

これは、一般的なものよりもノイズが少ないはずです。 HEAD reflog .