2013-05-17 6 views
99

私はいくつかのファイルをgitでuntrackedしています。私はいくつかの変更を行い、それらをコミットしたいと思いましたが、変更されていないファイルを最初にチェックインすることを忘れてしまったことに気付きました。そこで私はファイルを隠してから、変更されていないバージョンを追加しました。追加されたファイルを上書きするようにgit stashを強制します。

その後、リポジトリにstashを適用すると、すでに追加されているファイルが原因で競合が発生します。

スタッシュを適用し、スタティックのバージョンをリポジトリ内のオリジナルよりも優先的に使用するにはどうすればよいですか?代わりにgit stash apply

+1

醜い溶液で対話的に

$ git checkout stash -- <paths...> 

かを使用してスタッシュからチェックアウトすることができます: 'gitのを行う前に、' Gitのrm'を使用して新しいファイルを削除します隠す。 – tom

+0

それは歴史を失うことはありませんか?変更されていないバージョンを追加する理由は、履歴を保持するためでした。 – Stefan

+0

いいえ、履歴を失うことはありません。ファイルを削除して小さな修正でそれを追加してコミットすると、 'git'はこれをちょっとした修正として扱います。 – tom

答えて

173

使用git checkout

ありがとう:

$ git checkout stash -- . 
$ git commit 

これは彼らの隠さバージョンに、現在のディレクトリ内のすべてのファイルを復元します。


保つ必要があり、作業ディレクトリ内の他のファイルへの変更がある場合は、ここではあまり強引代替です:率の変化、またはマージがある場合

$ git merge --squash --strategy-option=theirs stash 

gitはマージを拒否します。誰かがよりよいものを思い付くまで、個々のファイルは

$ git checkout -p stash 
+0

おかげでトムは今日本当に2人を助けました! – Chad

+0

これらのどれも私の使用例では機能しませんでした。発見と私の解決策はここにありますhttp://stackoverflow.com/a/26685296/496046 - これもあなたの状況を解決するはずです@AlexanderBird – tremby

+1

'git checkout stash - .'このコマンドは、実行したときに何もしませんでした。 –

関連する問題