62

Git を効果的に使用する方法を学習しようとしていますが、次のケースをどのように解決する必要があるか (良い習慣/悪い習慣?) を考えています。

master に次の一連のコミットがあるとします。

  • 初期コミット
  • コミット 1
  • コミット 2
  • コミット 3

その後、最後の 2 つのコミットで行われたことが完全に間違っていることに気付き、コミット 1 からやり直す必要があります。質問:

  • どうすればいいですか?
  • コミット 2 と 3 を別のブランチに移動して、将来の参照用に保持し (結局のところそれほど悪くはなかったとします)、マスターでコミット 1 から作業を続けることはできますか?
4

1 に答える 1

76
git branch tmp            # mark the current commit with a tmp branch
git reset --hard Commit1  # revert to Commit1

SO の回答「git の 'git reset' と 'git checkout' の違いは何ですか?」 は、その種の操作について非常に有益です。

代替テキスト

Agit reset --hard HEAD~2は同じことを行います (Commit1最初に SHA1 を取得する必要はありません)。

Commit2とはまだ Git ref (ここではブランチ) によって参照されているためCommit3、いつでも元に戻すことができます ( git checkout tmp)。


実際、Darienはコメントで言及しています (別のブランチへの移動について) Commit2:Commit3

誤って間違ったブランチにコミットしたため、移動できました。

git checkout correctbranch
git rebase tmp
git branch -d tmp

これは、最初のブランチが にリセットされているため、ここで機能します。つまり、は新しい ' ' への(Commit1つまり、ここでは と)git rebase tmp以降のすべてのコミットをリプレイします。Commit1Commit2Commit3correctbranch

于 2010-09-15T15:26:42.393 に答える