2011-07-13 3 views

答えて

239

git reset --soft HEAD^は、必要な操作を行う必要があります。その後、インデックスの最初の変更(git diff --cachedで表示)が行われ、最新の変更がステージングされません。 git statusは、このようになります。

# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  modified: foo.java 
# 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: foo.java 
# 

その後、git add foo.javaを行うと、一度に両方の変更をコミットすることができます。あなたがunstageしたいコミットの任意の数がある可能性が1の代わりに

git reset HEAD~1 

:私に

+0

両方の変更はどこにありますか? –

+0

私は答えを編集しました。「変更をコミットする」には最初の変更があり、「変更はコミットのためにステージングされません」には2番目の変更があります。 – Antti

+2

この回答に記載されていることは、実際には 'git commit --amend'が行うことです。はるかに複雑なワークフローが必要です。これは良い指示にもかかわらず、OPの質問に答えることはできません( 'git reset')。 –

35

用途:

git reset HEAD^ 

あなたが尋ねた何であろう、デフォルトでリセット「混合」を行います。 foo.javaをunstagedにして、最新のコミットを削除します。

+0

あなたは「ソフト」リセットして「ハード」リセット、リセット「混合」であるものを私に説明する気にしませんか? –

+1

@Kit Ho-gitリセットマニュアルには、これらの優れた説明があります。 – manojlds

+3

@Kit、@manojlds:そうです。http://stackoverflow.com/questions/2530060/can-you-explain-to-me-git-reset-in-plain-english(恥知らずなプラグ) – Cascabel

34

git reset --softはちょうどそのためです:git reset --hardのようですが、ファイルには触れません。

+4

でした。これは私がまだ聞いたことのない最も簡単な説明でした。ありがとう! – phreakhead

+2

その答えは間違っています。 'git reset'は' git reset --hard'と似ていますが、ファイルには触れません。 " 'git reset --soft'ではありません。 'git reset --soft'は変更をステージングするので、コミットしたい場合にステージングに追加する必要はありませんが、' git reset'する必要があります(2回目、 '--soft')を使ってください。その答えは短いですが、間違っています。 –

17

常に次はそれを行うための方法(これが望ましい)より読みました。あなたの最後のすべてのファイルがコミットunstagingについては

関連する問題