私は自分の変更を隠します。今、私は隠し場所からいくつかのファイルだけ隠しておきたいです。これどうやってするの?
後述 、および「 git stashから単一のファイル(またはファイルへの変更)を抽出するにはどうすればよいですか? 」で詳しく説明されているように、use git checkout
または git show
は特定のファイルを復元します。
git checkout stash@{0} -- <filename>
それはoverwritefilename
:ローカルの変更がないことを確認するか、代わりに stashedファイルをマージしたいかもしれません 。
( コメント付き が 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>
」は、スタッシュが実行された時点のファイルのバージョンを復元するように見えます-NOT not(/)そのファイルのスタッシュされた変更を適用します。
後者を行うには:
git diff stash@{0}^1 stash@{0} -- <filename> | git apply
( peterflynn による コメント として、場合によっては| git apply -p1
が必要になることがあり、従来のdiffパスから先頭のスラッシュ(p1
)を削除します)
コメントのとおり:「unstash」(git stash pop
)、その後:
git add
)git stash --keep-index
最後のポイントは、いくつかのファイルを保持しながら他のファイルを隠せることです。
「 変更された複数のファイルのうち1つのファイルのみを隠蔽する方法 」で説明されています。
git checkout stash@{N} <File(s)/Folder(s) path>
例えば。前回の隠しファイルから./test.cファイルと./includeフォルダーのみを復元するには、
git checkout stash@{0} ./test.c ./include
私はVonCの答えがおそらくあなたが望むものだと思うが、ここに選択的な "git apply"をする方法がある:
git show stash@{0}:MyFile.txt > MyFile.txt
最初にすべての隠し場所をリストします
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
--
がなくても動作しますが、それらを使用することをお勧めします。 this postを参照してください。
二重ハイフンをオプションの解釈を停止し、それに続くすべての引数を文字通りに扱うためのシグナルとして認識するのも一般的です。
あなたがgit stash pop
(衝突しないで)した場合、それは適用された後に隠し場所を削除します。しかし、あなたがgit stash apply
した場合、隠しリストから削除せずにパッチを適用します。その後、git checkout -- files...
を使って不要な変更を元に戻すことができます。
もう一つの方法:
git diff stash@{N}^! -- path/to/file1 path/to/file2 | git apply -R
Windowsユーザーの場合:PowerShellでは中括弧は特別な意味を持ちます。一重引用符で囲むか、バッククォートでエスケープすることができます。例えば:
git checkout 'stash@{0}' YourFile
それがないと、エラーが発生する可能性があります。
Unknown switch 'e'