web-dev-qa-db-ja.com

git stash適用バージョン

私は2つの支店があります。設計

デザインの仕事私は隠し場所を作り、マスターに切り替え、いくつかの調整を行いました。設計に戻り、stash applyを実行して設計ブランチでの私の変更をすべて失いました。

これらをクリアも削除もしていないので、私は自分の仕事がすべて隠し場所の中にあることを望んでいます。

隠しリストを作成すると、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

特定の隠し場所をどのように適用できますか?

391
Lee

隠し場所への鍵は、実際には左側のstash@{n}項目です。だから試してみてください。

git stash apply stash@{0}

(zsh、fish、powershellなど、一部のシェルでは"stash@{0}"を引用符で囲む必要があります)。

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

git stash apply "stash@{n}"

あなたが入力することができます:

git stash apply n

隠し場所のリストを取得するには、

git stash list

実際にはstash@{0}はgitの改訂版であり、...に切り替えることができます。しかしgit stash apply ...はDTRTで現在の場所にそれを適用する方法を考え出すべきです。

616
araqnid

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

git stash pop stash@{n}

隠し場所を適用して隠し場所のキャッシュに保存するには、次のコマンドを実行します。

git stash apply stash@{n}
220
Dan Loewenherz

バージョン2.11以降、それはかなり簡単です、"stash@{n}"を言う代わりに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 @ {$ N}"と言わなければなりません。すなわち、refs/stashにreflogします。 "git stash"コマンドは、 "git stash apply stash @ {4}"の省略形として "git stash apply 4"を受け入れることを学びました

たとえ変更がstashが記録した変更と重ならなかったとしても、作業ツリーに変更があった場合、git stash apply "は作業を拒否するために使用されていました。

42
Pau

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

git stash apply "stash@{0}"

...または変更を適用してstashから削除します。

git stash pop "stash@{0}"

それ以外の場合は、引用符なしでこのエラーが発生する可能性があります。

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

40
jterry
git stash apply n

次に適用する隠し場所を選択します

git stash apply 1
2
panthari
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