2012-03-06 5 views
311

で削除したファイル、あなたはどうなるファイルへの変更を破棄するために:私は破棄する変更は、ファイルを削除された場合はどうUnstage通常のgit

git checkout -- <file> 

?上記の行にエラーがあります:

他の変更を元に戻すことなく、その1つのファイルを復元するコマンドはありますか?

ボーナスポイント:また、私は破棄する変更はファイルを何を追加している場合はどうなりますか?私はその変化を無段階にする方法を知りたい。

+1

変更を取り消すと、2つの異なることがあります。 –

+0

これは1つの投稿の2つの異なる質問と問題です。これにより、回答が非常に不必要に混乱することになります。 –

答えて

457

あなたは「gitのrmを」または「RM」に続いて「gitの-Aを追加する」または類似した何かの効果を元に戻すしたいしていると仮定すると、あなたがまだコミットしていないと仮定すれば、上の行は十分です。

git reset COMMIT_HASH file_path 
git checkout COMMIT_HASH file_path 
git add file_path 

これは、いくつかは、前のコミットが発生削除のために動作します:それは上演し、コミットされている場合は

+1

完璧な答え! –

+21

'--'がキーです。 'git reset 'は動作しません。これが私をここに連れてきました。 –

+0

完全に動作します。これを1つのコマンドに集約できますか? –

38

両方の質問はgit statusで回答されています。ファイルの使用に一方でgit reset HEAD filename.ext

# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# deleted: test 

を削除unstageするには、新しいファイルの使用にgit rm --cached filename.ext

# Changes to be committed: 
# (use "git rm --cached <file>..." to unstage) 
# 
# new file: test 

を追加unstageする

git checkout -- unstage決して、それだけで非段階的な変更を破棄します。

+3

Debianのgit 1.7.2.5で削除されたファイルのヒントが表示されません。 – tripleee

7

2つの質問に対する回答は関連しています。私は2番目から始めましょう:

(いくつかの他のコマンドは、暗黙のうちにgit rmのように、同様の変更をステージングかかわらず、多くの場合、git addで)あなたはgit reset -- <file>とその変更をバックアウトすることができますファイルを上演してきたら。

ファイルを削除するにはgit rmを使用している必要があります。これはrmでファイルを削除し、その変更をステージングするのと同じです。最初にgit reset -- <file>でステージングを解除すると、git checkout -- <file>で回復できます。まず、

# this restores the file status in the index 
git reset -- <file> 
# then check out a copy from the index 
git checkout -- <file> 

「gitの追加」元に戻すには:

0

は、次のファイルをリセットします。

関連する問題