2013-03-10 12 views
9

ここは私がしたいことです。私は前に2つのコミットに戻って、そのコミットで変更されたファイルを新しいコミットのように戻したいと思っています。しかし、私は最後のコミットを失いたくはありません。私の最後のコミットはコードにいくつかの間違いがありますが、私は今のところそれを保つつもりです。Gitで最後のコミットを失うことなく前のコミットに戻るには?

私はいくつかの文書を読みましたが、あなたの頭をリセットするときに何が起こるかはっきりしませんでした。たとえば、リセットしている(後退している)まで、すべてのコミットを失いますか?

私はこのすべての仕組みを理解しようとしていますが、git revertresetおよびcheckoutコマンドについては、むしろ混乱しています。

私は、コミットするのではなく最後のコミットを隠しておかなければならないことを認識していますが、それは今のところ別の話です。

+1

あなたは何をしたいのですか?以前のコミットを元に戻しますか?または、2つのファイルを除いて、2つのコミットが行った変更のほとんどを保持したいですか? – jszakmeister

+0

jszakmeister、私はコミットを取り除きたくありません。私は過去の歴史を損なわないようにしたい。私はちょうど2つのコミットを新しい作業段階として前に戻したいと思う。 –

+0

「戻ってくる」ことは何を意味するのかはまだ不明です。 – wRAR

答えて

9

revertは、古いコミットによる変更を元に戻す新しいコミットを行います。 reset --hardは、現在のブランチのHEADを指定されたコミットに変更します。 checkoutは、作業コピーを指定されたブランチまたはコミットに切り替えます。

以前のコミットにブランチをリセットすると、新しいコミットはタグの他のブランチまたは祖先の一部ではなくなります(しかし、まだreflogでアクセス可能です)。

あなたは何をする必要があるのか​​明確ではありませんが、最も可能性の高い解決策は、古いコミットまたは一連のコミットを完全に元に戻すことです(古いコミットを変更するか、履歴から削除する)。rebase -i

+0

'git revert'は、前回のコミットの変更を無効にするコミットを作成するため、強い意味を持っています。あなたが意図していることが分からない限り、使用するときは注意してください。 – LopSae

+0

@LopSaeによって作成されたコミットは公開されていないので、不要なことがあれば簡単に削除できます。リセットとリベースは、エラーからの回復がずっと難しくなるので、はるかに危険なコマンドです。こんにちは、@ wrar。 – wRAR

+0

以前のコミットにチェックアウトすると、その後、git logを使用してコミット履歴を表示すると、私が元に戻したコミット後のすべてのレコードが失われます。それを解決するには?前回のコミットをチェックアウトした後、完全なコミット履歴を表示することを意味します。 – Mario

10

戻って、前に2回コミットする場合は、git checkout HEAD~2を実行します。これは、それが当時のようにすべてあなたを得るでしょう。 masterの支店にいた場合、git checkout masterはあなたを現在の状態に戻します。ただし、現在の状態を維持したいが、そこに新しい開発ブランチを開始する場合は、git checkout -b HEAD~2が新しいブランチを開始します。あなたがマスターを巻き戻したいが、あなたの現在の未完/壊れた仕事をゆるめたくない場合は、

git branch wip   # New branch ends a current tip 
git reset --hard HEAD~2 # Old branch rewound, get files from then 
関連する問題