変更を隠しました。ここで、スタッシュから一部のファイルのみをアンスタッシュしたいと考えています。これどうやってするの?
8 に答える
以下で説明し、「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 -p1
p1
コメントしたように:「unstash」(git stash pop
)、次に:
- 残しておきたいものをインデックスに追加 (
git add
) - 残りを隠します:
git stash --keep-index
最後のポイントは、他のファイルを隠している間、いくつかのファイルを保持できるようにすることです。「変更された複数のファイルから 1 つのファイルのみを stash する方法
」に示されています。
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 pop
(競合がない場合)適用後にスタッシュを削除します。ただしgit stash apply
、隠しリストから削除せずにパッチを適用する場合。次に、不要な変更を元に戻すことができますgit checkout -- files...
例えば
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