2016-10-17 18 views
0

は(Cは最新のコミットである)、それにいくつかのコミットとのgitブランチを考える:HEADを動かさずに作業ツリーをリセットするにはどうしたらいいですか?

A -> B -> C 

すべてのファイルは、彼らがコミットBにあった状態が、HEADになるように、私は私のワークスペースをリセットするにはどうすればよいですまだCにいるのですか?

私はgit-resetを見ましたが、どのオプションも役に立たないようです。私はgit reset HEAD~を試みたが、それは、ヘッドを移動

--soft 
    Does not touch the index file or the working tree at all 
    (but resets the head to <commit>, just like all modes do). 

:manページには、すべての異なるモードがHEADを移動することを示唆しています。

+0

最近、多くの質問に対する回答が選択されていません。それに対する特別な理由は何ですか? –

+0

ああ、申し訳ありません。彼らのほとんどは良い答えがあるので、私はそれを整理します。 –

+0

心配はいりません。私はちょうど不思議だった。 –

答えて

6

git checkout [-p|--patch] [<tree-ish>] [--] <pathspec>...

git checkout with <paths>または--patchは、インデックスから自分の元の内容を変更または削除パスを復元するか(最も頻繁にコミットっぽい)<tree-ish>という名前から内容でパスを交換するために使用されます。

ですから、(任意のサブツリーのために正常に動作するか、ファイル(複数可)、あまりにも)あなたのリポジトリのルートでこれを実行する必要があります。

git checkout HEAD~ -- . 

これは、元に戻すために必要な変更を適用するにgitになりますファイルをHEAD~状態に変更すると、変更がインデックスに反映されます。

2

だけgit checkoutを使用します。

$ git checkout HEAD~ 
$ # Or 
$ git checkout HEAD^ 
$ # Or 
$ git checkout B 

これは、HEADはブランチから切り離されデタッチヘッド状態にあなたをもたらすでしょう。

+0

残念なことにトリックチックは機能しません。 4つのスペースを手動でインデントするか、ハイライトして、編集ツールバーの '{}'ボタンをクリックします。 –

+0

@MadPhysicistくそー、私はgithubからこれに慣れていますが、ありがとう! –

+0

心配はいりません。他の問題がありました.GitHubで手動の字下げを恐れることがありましたが、私はトリックダニを見つけました。 –

2

あなたは、ハードとソフトリセットの組み合わせを使用することができます:

git reset --hard B 
git reset --soft C 

最初はBHEADを移動し、すべてのファイルがBのように見えるようになります。次に、ファイルを変更せずにCに戻します。

このメソッドは、デタッチヘッド状態ではなく、BCの間のすべての相違点が最後の実際のコミットの逆差分として表示されるだけです。あなたはまだ元のブランチにいます。

特に目的用に作成していない限り、参照名ではなくSHA-1としてCを指定する必要があります。

+1

'HEAD @ {1}'はハッシュの代わりに 'C'のために行うべきです。 – CherryDT

関連する問題