web-dev-qa-db-ja.com

特定のファイルだけを隠すには?

私は自分の変更を隠します。今、私は隠し場所からいくつかのファイルだけ隠しておきたいです。これどうやってするの?

315
morpheus

後述 、および「 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}に関連))。

yucerコメント内の を提案します:

そのファイルから適用する変更を手動で選択する場合:

git difftool stash@{0}..HEAD -- <filename>

Vivekコメント内の を追加します:

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つのファイルのみを隠蔽する方法 」で説明されています。

390
VonC
git checkout stash@{N} <File(s)/Folder(s) path> 

例えば。前回の隠しファイルから./test.cファイルと./includeフォルダーのみを復元するには、

git checkout stash@{0} ./test.c ./include
113
Balamurugan A

私はVonCの答えがおそらくあなたが望むものだと思うが、ここに選択的な "git apply"をする方法がある:

git show stash@{0}:MyFile.txt > MyFile.txt
35
Mike Monkiewicz

最初にすべての隠し場所をリストします

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を参照してください。

二重ハイフンをオプションの解釈を停止し、それに続くすべての引数を文字通りに扱うためのシグナルとして認識するのも一般的です。

13
Black

あなたがgit stash pop(衝突しないで)した場合、それは適用された後に隠し場所を削除します。しかし、あなたがgit stash applyした場合、隠しリストから削除せずにパッチを適用します。その後、git checkout -- files...を使って不要な変更を元に戻すことができます。

10
Ben Jackson

もう一つの方法:

git diff stash@{N}^! -- path/to/file1 path/to/file2  | git apply -R
3
Lacho Tomov

Windowsユーザーの場合:PowerShellでは中括弧は特別な意味を持ちます。一重引用符で囲むか、バッククォートでエスケープすることができます。例えば:

git checkout 'stash@{0}' YourFile

それがないと、エラーが発生する可能性があります。

Unknown switch 'e'

2
Janac Meena