git stash apply version

匿名 (未验证) 提交于 2019-12-03 01:10:02

问题:

I really hope someone can advise.

I have 2 branches master | design

Working in design I did a stash and switched to master, made some adjustments. Switched back to design and did a stash apply only to lose all my changes in the design branch.

I am hoping all my work is within a stash as I have not cleared or removed these.

If I do a stash list I get 4 results:

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 

If I try git stash apply f2c0c72 I am getting an error:

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

How can I apply a specific stash?

Hope someone can help!!

回答1:

The keys into the stash are actually the stash@{n} items on the left. So try git stash apply stash@{0} etc. (note that in some shells you need to quote "stash@{0}", like zsh and fish).

In fact stash@{0} is a revision in git that you can switch to... but git stash apply ... should figure out how to DTRT to apply it to your current location.



回答2:

To apply a stash and remove it from the stash list, run:

git stash pop stash@{n} 

To apply a stash and keep it in the stash cache, run:

git stash apply stash@{n} 


回答3:

If one is on a Windows machine and in PowerShell, one needs to quote the argument such as:

git stash apply "stash@{0}" 

...or to apply the changes and remove from the stash:

git stash pop "stash@{0}" 

Otherwise without the quotes you might get this error:

fatal: ambiguous argument 'stash@': unknown revision or path not in the working tree.



回答4:

Since the version 2.11, it's pretty easy, you can use the N stack number instead of saying "stash@{n}". So now instead of use:

git stash apply "stash@{n}" 

You can type:

git stash apply n 

For example, in your list:

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 

If you want to apply stash@{1} you could type:

git stash apply 1 

Otherwise, you can use it even if you have some changes in your directory since 1.7.5.1, but you must be sure the stash won't overwrite your working directory changes if it does you'll get an error:

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

In earlier versions to 1.7.5.1, it refused to work if there was a change in the working directory.


Git release notes:

The user always has to say "stash@{$N}" when naming a single element in the default location of the stash, i.e. reflogs in refs/stash. The "git stash" command learned to accept "git stash apply 4" as a short-hand for "git stash apply stash@{4}"

git stash apply" used to refuse to work if there was any change in the working tree, even when the change did not overlap with the change the stash recorded



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!