web-dev-qa-db-ja.com

gitを使用してマスターからブランチにコミットを移動する

私はGitを効果的に使用する方法を学習しようとしています、そして私は次のケースをどのように解決するべきか(良い実践/悪い実践?)

マスターに次の一連のコミットがあるとします。

  • 最初のコミット
  • コミット1
  • コミット2
  • コミット3

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

  • どうすればいいですか?
  • コミット2と3を別のブランチに移動して将来の参照用に保持し(結局それほど悪くなかったとしましょう)、マスターのコミット1から作業を続けることはできますか?
62
Paul
git branch tmp            # mark the current commit with a tmp branch
git reset --hard Commit1  # revert to Commit1

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

alt text

git reset --hard HEAD~2も同じことを行います(Commit1のSHA1を最初に戻す必要はありません)。

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


実際、 Darien はコメントで言及しています(Commit2Commit3を別のブランチに移動することに関して):

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

git checkout correctbranch
git rebase tmp
git branch -d tmp

これは、最初のブランチがCommit1にリセットされたため、ここで機能します。つまり、git rebase tmpは、Commit1の後のすべてのコミットを再生します(したがって、ここでCommit2およびCommit3)新しい「correctbranch」に。

74
VonC