2012-04-19 14 views
171

のコミットをすべて失うことなく、特定のGitコミットに切り替える方法作業コピーを特定のGitコミットに一時的に切り替える

私はローカルファイルを変更したいがコミットのデータベースはそのまま残しておき、現在の位置ポインタだけが現在選択されているコミットに設定されている。

ファイルの状態を特定のコミットに変更し、プロジェクトを実行し、終了したらファイルを最後のコミットに戻したいと考えています。

プロジェクトのフォルダ全体を圧縮せずにこれを行うにはどうすればいいですか?

+0

関連する:[前のGitコミットに戻す](http://stackoverflow.com/q/4114095/456814) –

答えて

251

あなたが特定の支店mybranchにいる場合は、git checkout commit_hashに進んでください。その後、git checkout mybranchで支店に戻ることができます。私は今日バグを二等分する同じゲームを持っていた:)また、git bisectについて知っておくべきである。

+1

私は気づきました - 私は欲しいものを正確にやっており、コミットは失われていません。 – Paul

+6

きれいなリポジトリにあり、ブランチングを行う必要がない場合は、 'git checkout commit_hash'を実行するだけです。いくつかのユースケース(私のようなもの)ではもっと簡単かもしれません。 – enderland

+0

@enderland:あなたのHEADは常にいくつかのブランチを指しています: –

39

最初にgit logを使用してログを確認し、必要なコミットを選択し、コミットを識別するために使用されるsha1ハッシュを書き留めます。次に、git checkout hashを実行します。完了後、git checkout original_branch。これは、HEADを移動しないという利点があります。単に作業コピーを特定のコミットに切り替えるだけです。

+4

あなたは 'git checkout 'を意味すると思います。 'git checkout HEAD'は事実上NOOPです –

+0

私はリセットが気に入っています - ハードは私が欲しいものを正確にやっていて、コミットは失われていません。 – Paul

+3

'git reset -hard 'は現在のブランチのHEADを変更しますが、 'git checkout 'では、ブランチを変更しないデタッチされたチェックアウトを取得し、ブランチの元のハッシュIDを知らなくても簡単に戻ることができますこの回答に示されているように。 – jofel

関連する問題