我在我的私房钱里存了一小块。我已经使用git stash apply将它应用到我的工作副本。现在,我想通过反向应用补丁来撤销这些更改(有点像git revert会做的事情,但针对的是stash)。

有人知道怎么做吗?

澄清:在我的工作副本中有其他更改。我的具体情况很难描述,但您可以想象在存储库中有一些调试或实验代码。现在,它混合在我的工作副本与其他一些变化,我想看看效果与不从隐藏的变化。

目前看来stash还不支持这个功能,但是git的stash apply—reverse将是一个不错的功能。


当前回答

git checkout -f

将删除任何非提交的更改。

其他回答

git stash show -p | git apply --reverse

警告,这不会在所有情况下:“git apply -R”(man)不能正确处理两次触及同一路径的补丁,这已在git 2.30(2021年第一季度)中得到纠正。

这在将路径从常规文件更改为符号链接(反之亦然)的补丁中是最相关的。

参见Jonathan Tan (jhowtan)提交b0f266d(2020年10月20日)。 (由Junio C Hamano - gitster -在commit c23cd78中合并,2020年11月2日)

apply:当-R时,也是反向的section列表 协助:Junio C Hamano 署名:乔纳森·谭

A patch changing a symlink into a file is written with 2 sections (in the code, represented as "struct patch"): firstly, the deletion of the symlink, and secondly, the creation of the file. When applying that patch with -R, the sections are reversed, so we get: (1) creation of a symlink, then (2) deletion of a file. This causes an issue when the "deletion of a file" section is checked, because Git observes that the so-called file is not a file but a symlink, resulting in a "wrong type" error message. What we want is: (1) deletion of a file, then (2) creation of a symlink. In the code, this is reflected in the behavior of previous_patch() when invoked from check_preimage() when the deletion is checked. Creation then deletion means that when the deletion is checked, previous_patch() returns the creation section, triggering a mode conflict resulting in the "wrong type" error message. But deletion then creation means that when the deletion is checked, previous_patch() returns NULL, so the deletion mode is checked against lstat, which is what we want. There are also other ways a patch can contain 2 sections referencing the same file, for example, in 7a07841c0b ("git-apply: handle a patch that touches the same path more than once better", 2008-06-27, Git v1.6.0-rc0 -- merge). "git apply -R"(man) fails in the same way, and this commit makes this case succeed. Therefore, when building the list of sections, build them in reverse order (by adding to the front of the list instead of the back) when -R is passed.

你可以按照我分享的图像,以取消藏匿,如果你不小心点了藏匿。

V1 git手册页有一个关于取消应用存储的参考。节选如下。

更新的V2 git手册页不包括任何关于取消应用stash的参考,但下面的内容仍然可以很好地工作

取消应用Stash 在某些用例场景中,您可能希望应用存储的更改,做一些工作,但随后取消应用最初来自存储的那些更改。Git没有提供这样的stash unapply命令,但是可以通过简单地检索与stash相关的补丁并反向应用它来达到这个效果:

$ git stash show -p stash@{0} | git apply -R

同样,如果你没有指定一个存储,Git假设是最近的存储:

$ git stash show -p | git apply -R

您可能想要创建一个别名,并有效地向Git添加一个stash-unapply命令。例如:

$ git config --global alias.stash-unapply '!git stash show -p | git apply -R'
$ git stash apply
$ #... work work work
$ git stash-unapply

git stash[save]获取你的工作目录状态和索引状态,并将它们存储起来,将索引和工作区域设置为HEAD版本。

Git stash apply会带回这些更改,所以Git reset—hard会再次删除它们。

Git stash pop带回这些更改并删除顶部存储的更改,因此Git stash [save]将在这种情况下返回到之前(预弹出)状态。

您可以应用两条命令

Git重置。//反转文件

then

Git结帐。//改变