2011-12-20 8 views
1

gitを使用してプロジェクトを管理していますが、この種のプログラムではあまり経験がありませんので、私はそれらを不適切に使用します(例: 1回のコミットだけで変更)。私はそれらをよりよく使用しようとしています。ブランチの作成後に多くのコミットを元に戻す

Btw私はブランチに適したプロジェクトの拡張を開発し始めたことに気付きました。だからgit guiから、私はマスターのコピーである新しいブランチを作成しました。 今私は、プロジェクトに関連していないと私が作った最後のコミットにマスターを元に戻したいです。私はこのコミットが何であるかは知っていますが、私はHEADからこれまでのすべてのコミットを元に戻す方法を知らず、ブランチに影響するかどうかわかりません(新しい作業をすべて失うのは本当の苦痛でしょう) ..)

どうすればいいですか?

Ps:通常はgit guiを使用しますが、git bashの使用に問題はありません。私はwin7を使用しています。私はJavaのアンドロイドプロジェクトをEclipseで管理しています

答えて

2

あなたのブランチを作成したら、マスターに戻って、git reset --hard commitidで希望のコミットにリセットしてください。現在、 'master'はこのコミットに設定されており、ブランチは以前に設定したコミットを指しています。

ブランチ名は、特定のコミットの参照または代替名です。リセットを使用すると、参照が指すコミットを変更することができます(--hardを使用)。

+0

!ありがとう –

+0

Btw、復帰後に私はコードを修正し、ブランチでもこの変更をしたいので、masterとブランチをマージします。からブランチが作成されたときのすべてのプログレスを失いません> 、 右? –

2

masterブランチの変更は、新しいブランチの履歴には影響しません。

あなたがresetを使用し、コミット具体的であることをmasterのHEADを変更する場合:

git checkout master 
git reset --hard <commit id> 

イベントのあなたの順序であった場合:

  1. 大きな変更をコミットします。
  2. 新しいブランチを作成します。

そして、あなただけのresetを使用し、戻る前にコミットする前にmasterを取得したい:

git checkout master 
git reset --hard HEAD^ 

イベントのあなたのシーケンスがあった場合:

  1. は大きな変化をコミットします。
  2. 他の変更をコミットします(これはmasterにあるはずです)。
  3. 新しいブランチを作成します。

そして、あなたがちょうどそのまま他のすべてのコミットを残したままbig changemasterからコミット削除したい、revert使用:

git checkout master 
git revert <commit id> 

のイベントのあなたのシーケンスがあった場合:

  1. は大きな変化をコミット。
  2. 他の変更を行います(masterからも削除する必要があります)。
  3. 新しいブランチを作成します。

そして、あなたがmasterからbig changeを含め、最近のすべてが通過までコミット削除すると、使用reset:私は必要な正確に何

git checkout master 
git reset --hard <big change commit id>^ 
+0

素晴らしい説明、私はあなたが+1をたくさん得られると確信しています。それは受け入れられた答えを決定することは難しかったが、今度はもっと簡潔であるので私はもう1つを選ぶ –

関連する問題