変更を隠しておきました。今、私はstashからいくつかのファイルだけをunstashしたいと思います。これどうやってするの?
変更を隠しておきました。今、私はstashからいくつかのファイルだけをunstashしたいと思います。これどうやってするの?
回答:
下記、及びで詳述「どのように私はGitのスタッシュから単一のファイル(またはファイルへの変更)を抽出しますか?」、あなたが使用することを適用することができgit checkout
たりgit show
、特定のファイルを復元します。
git checkout stash@{0} -- <filename>
これは上書き しますfilename
。ローカルでの変更がないことを確認してください。そうでない場合は、隠しておいたファイルをマージすることをお勧めします。
(Jaime Mがコメントしたように、特殊文字をエスケープする必要があるtcshのような特定のシェルでは、構文は次のようになります。 )git checkout 'stash@{0}' -- <filename>
または別のファイル名で保存するには:
git show stash@{0}:<full filename> > <newfile>
(ここ
<full filename>
に、プロジェクトのトップディレクトリに対するファイルのフルパス名があることに注意してください(:を基準にしてくださいstash@{0}
))。
そのファイルから適用する変更を手動で選択する場合:
git difftool stash@{0}..HEAD -- <filename>
「
git checkout stash@{0} -- <filename>
」のように見えますが、stashが実行された時点のファイルのバージョンが復元されます。そのファイルのstashされた変更は(ただ)適用されません。
後者を行うには:
git diff stash@{0}^1 stash@{0} -- <filename> | git apply
(peterflynnによるコメントのように、場合によっては、従来のdiffパスから()の先行スラッシュを1つ削除する必要があります)| git apply -p1
p1
コメントしたとおり:「unstash」(git stash pop
)、次に:
git add
)git stash --keep-index
最後のポイントは、他のファイルを隠しながら、いくつかのファイルを保持できるようにすることです。
これは、「変更された複数のファイルから1つのファイルのみを隠しておく方法」に示されています。
git stash pop
、ファイルの競合が原因でできない場合は機能しません。その場合、バラムルガンAの答えが私にとってはうまくいきました。
unstash
意味すると仮定するとpop
、おそらくほとんどの場合そうなると思われるので、これは質問に部分的にしか答えません。その後、残りの変更をポップするときの競合や混乱を避けるために、選択的に適用されたピースをスタッシュからどのように削除しますか?
git checkout stash@{N} <File(s)/Folder(s) path>
例えば。最後に隠しておいた./test.cファイルと./includeフォルダーのみを復元するには、
git checkout stash@{0} ./test.c ./include
-a
隠し場所を作成しているときに使用したフラグにスタックしました。
VonCの答えはおそらくあなたが望むものだと思いますが、選択的な「git apply」を行う方法は次のとおりです。
git show stash@{0}:MyFile.txt > MyFile.txt
checkout
何も気にしないファイルをコピーしたいだけなので、これは私にとってはうまくいきます。
git show stash@`{0`}:Path/To/MyFile.txt |sc Path/To/MyFile.txt
- PSは特別に中括弧を解釈しないようにするためにバッククォートが必要であり、かつsc
必要であるPSのため、>
オペレータのデフォルトはUTF-16(実際にはUCS-2)には、おそらくない何をしたいです。@バラムルガンAの答えはこれらの問題に悩まされることはありません。
最初にすべての隠し場所をリストします
git stash list
↓
stash@{0}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{1}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{2}: WIP on master: 7e450c81 Merge branch 'Offlineseite'
次に、スタッシュにあるファイルを表示します(スタッシュ1を選択します)。
git stash show 1 --name-only
//Hint: you can also write
//git stash show stash@{1} --name-only
↓
ajax/product.php
ajax/productPrice.php
errors/Company/js/offlineMain.phtml
errors/Company/mage.php
errors/Company/page.phtml
js/konfigurator/konfigurator.js
次に、目的のファイルを適用します。
git checkout stash@{1} -- <filename>
またはフォルダ全体:
git checkout stash@{1} /errors
なしでも動作--
しますが、使用することをお勧めします。これを見て投稿を。
また、オプションの解釈を停止し、後続のすべての引数を文字どおりに処理するための信号として、二重ハイフンを認識することも一般的です。
git stash pop
追跡されていないファイルに対してエラーをスローする問題に直面しました。ありがとうございました。
あなたがgit stash pop
(衝突なしで)それを適用した後、隠し場所を削除します。しかし、あなたgit stash apply
がstashリストから削除せずにパッチを適用する場合。次に、不要な変更を元に戻すことができますgit checkout -- files...
git stash pop
、手動で修正する必要があり、スタッシュは削除されません。
もう1つの方法:
git diff stash@{N}^! -- path/to/file1 path/to/file2 | git apply -R
checkout
またはshow
を使用すると、ファイルが盲目的に上書きされます。「もう1つの方法」は控えめな表現です。
path/to/file2
あなたがあなたのワークスペースの同じファイルと比較したいので、私は得ていません。2番目のパスを除外しても、私には問題ありません。-そして、-R
オプションを使用してエラーメッセージが表示されます(「パッチを逆に適用します」、隠してあるバージョンにパッチを適用しようとしますか?!)。だから私の作業バージョンは次のようになりgit diff stash@{N}^! -- path/to/file | git apply -
ます。
...| git apply -3 -