git stash適用バージョン


513

私には2つのブランチがあります。マスター| 設計

デザインで作業していて、スタッシュをしてマスターに切り替え、いくつかの調整を行いました。設計に戻りstash apply、設計ブランチでのすべての変更を失うだけでした。

私はこれらをクリアまたは削除していないので、すべての作業が隠し場所にあることを願っています。

stashリストを実行すると、4つの結果が得られます。

stash@{0}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{1}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{2}: WIP on design: eb65635... Email Adjust
stash@{3}: WIP on design: eb65635... Email Adjust

私がしようとするgit stash apply f2c0c72と、エラーが発生します:

fatal: Needed a single revision
f2c0c72: no valid stashed state found

特定の隠し場所を適用するにはどうすればよいですか?


26
構文git stash apply 0(2016年第4四半期、Git 2.11)が(の代わりにgit stash apply stash@{0})あることに注意してください。ここで私の答えを参照してください
VonC 2016

回答:


838

スタッシュの鍵は、実際stash@{n}には左側のアイテムです。だから試してください:

git stash apply stash@{0}

"stash@{0}"zsh、fish、powershellなどの一部のシェルでは引用する必要があることに注意してください)。

バージョン2.11以降は非常に簡単です。を使用する代わりにNスタック番号を使用できますstash@{n}。だから今では使用する代わりに:

git stash apply "stash@{n}"

次のように入力できます。

git stash apply n

スタッシュのリストを取得するには:

git stash list

実際にstash@{0}は、切り替え可能なgitのリビジョンですがgit stash apply ...、現在の場所にそれを適用するDTRTの方法を理解する必要があります。


90
一部のシェルでは、stash @ {n}を引用符で囲む必要があることに注意してください。
Senjai

7
別のヒント:たとえばgitk stash@{0}、特定の隠し場所で行った変更を表示することができます。
アンチノーム

11
zshのユーザーは、二重引用符などに必要git stash apply "stash@{0}"
mynameistechno

7
stash@{n}入力するのが最も厄介なコマンドです。独自のエイリアスまたは関数を作成する以外に、これを行うショートカットはありますか?
Dylanthepiguy 2016

2
git stash apply n平和
ビクター

241

stashを適用してstashリストから削除するには、次のコマンドを実行します。

git stash pop stash@{n}

stashを適用してstashキャッシュに保持するには、以下を実行します。

git stash apply stash@{n}

8
2つのオプションを区別してくれてありがとう。私はこれを試してみましたが、ブランチaからブランチbにスタッシュをポップした場合、スタッシュはスタッシュキャッシュにまだ残っているようです。おそらく、将来的にスタッシュをブランチ/ aにポップ/適用するオプションがまだあると思います。それが理にかなっていることを本当に願っています。ハンディ!
longda

42
PowerShellの場合:git stash pop "stash@{n}"
ankitjaininfo 2014

1
:引用符/単一引用符でちょうど波括弧付きのPowerShellの幸せgit stash apply stash@"{n}"
m1kael

PowerShellも受け入れますgit stash apply stash@`{n`}(中括弧の前のバッククォートに注意してください)。
Ian Kemp

52

バージョン2.11以降、これは非常に簡単なので、の代わりにNスタック番号を使用できます"stash@{n}"。だから今では使用する代わりに:

git stash apply "stash@{n}"

次のように入力できます。

git stash apply n

たとえば、リストでは:

stash@{0}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{1}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{2}: WIP on design: eb65635... Email Adjust
stash@{3}: WIP on design: eb65635... Email Adjust

適用したい場合は、stash@{1}次のように入力します。

git stash apply 1

そうでない場合は、ディレクトリに1.7.5.1以降の変更があったとしても使用できますが、エラーが発生した場合にstashが作業ディレクトリの変更を上書きしないようにする必要があります。

error: Your local changes to the following files would be overwritten by merge:
        file
Please commit your changes or stash them before you merge.

1.7.5.1より前のバージョンでは、作業ディレクトリに変更があった場合は機能しませんでした。


Gitリリースノート:

stashのデフォルトの場所、つまりrefs / stashのreflogsで単一の要素に名前を付ける場合、ユーザーは常に「stash @ {$ N}」と言う必要があります。「git stash」コマンドは、「git stash apply stash @ {4}」の省略形として「git stash apply 4」を受け入れることを学習しました

変更がstashが記録した変更とオーバーラップしていなくても、作業ツリーに変更があった場合に作業を拒否するために使用されたgit stash apply


41

WindowsマシンとPowerShellの場合は、次のように引数を引用する必要があります。

git stash apply "stash@{0}"

...または変更を適用してスタッシュから削除するには:

git stash pop "stash@{0}"

そうしないと、引用符がないとこのエラーが発生する可能性があります。

fatal:あいまいな引数 'stash @':作業ツリーにない不明なリビジョンまたはパス。


どうやらこれは、Mac OSX 10.11でフィッシュシェルを使用するときにも同様に行う必要がある方法です。
lps 2015

8
git stash list

次に、適用するスタッシュを選択し、番号のみを使用します。

git stash apply 1

2
Git Stash list 

リストにはすべての隠しアイテムが表示されます。例:stash @ {0} :, stash @ {1}:、..、stash @ {n}:

次に、stash @ {n}を示す番号nを選択します。

git stash apply n 

for eg: git stash apply 1 will apply that particular stashed changes to the current branch
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.