496

変更を隠しました。ここで、スタッシュから一部のファイルのみをアンスタッシュしたいと考えています。これどうやってするの?

4

8 に答える 8

600

以下で説明し、「git stash から単一のファイル (またはファイルへの変更) を抽出するにはどうすればよいですか? 」で詳しく説明されているように、特定のファイルを使用git checkoutまたはgit show復元することができます。

git checkout stash@{0} -- <filename>

Git 2.23 以降 (2019 年 8 月) では、紛らわしいコマンドgit restoreを置き換える を使用します。git checkout

git restore --source='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>

Vivekはコメントに次のように追加します。

git checkout stash@{0} -- <filename>" " は、stash が実行された時点のファイルのバージョンを復元するように見えます -- そのファイルの stash された変更は (単に) 適用されません。
後者を行うには:

git diff stash@{0}^1 stash@{0} -- <filename> | git apply

( peterflynnのコメントによると、場合によっては、従来の差分パスから先頭のスラッシュ( ) を 1 つ削除する必要がある場合があります)| git apply -p1p1


コメントしたように:「unstash」(git stash pop)、次に:

  • 残しておきたいものをインデックスに追加 ( git add)
  • 残りを隠します:git stash --keep-index

最後のポイントは、他のファイルを隠している間、いくつかのファイルを保持できるようにすることです。「変更された複数のファイルから 1 つのファイルのみを stash する方法
」に示されています。

于 2013-03-07T06:39:06.687 に答える
124
git checkout stash@{N} <File(s)/Folder(s) path> 

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

git checkout stash@{0} ./test.c ./include
于 2014-03-21T09:44:25.720 に答える
38

VonCの答えはおそらくあなたが望むものだと思いますが、選択的な「git apply」を行う方法は次のとおりです。

git show stash@{0}:MyFile.txt > MyFile.txt
于 2013-03-07T16:05:01.877 に答える
12

git stash pop(競合がない場合)適用後にスタッシュを削除します。ただしgit stash apply、隠しリストから削除せずにパッチを適用する場合。次に、不要な変更を元に戻すことができますgit checkout -- files...

于 2013-03-07T06:44:15.427 に答える
1

例えば

git stash show --name-only

結果

ofbiz_src/.project
ofbiz_src/applications/baseaccounting/entitydef/entitymodel_view.xml
ofbiz_src/applications/baselogistics/webapp/baselogistics/delivery/purchaseDeliveryDetail.ftl
ofbiz_src/applications/baselogistics/webapp/baselogistics/transfer/listTransfers.ftl
ofbiz_src/applications/component-load.xml
ofbiz_src/applications/search/config/elasticSearch.properties
ofbiz_src/framework/entity/lib/jdbc/mysql-connector-java-5.1.46.jar
ofbiz_src/framework/entity/lib/jdbc/postgresql-9.3-1101.jdbc4.jar

次に、特定のファイルにスタッシュをポップします

git checkout stash@{0} -- ofbiz_src/applications/baselogistics/webapp/baselogistics/delivery/purchaseDeliveryDetail.ftl

その他の関連コマンド

git stash list --stat
get stash show
于 2020-12-11T05:10:18.660 に答える