Answers:
当我必须将隐藏的更改应用于脏的工作副本(例如,从存储中弹出多个更改集)时,可以使用以下命令:
$ git stash show -p | git apply -3 && git stash drop
基本上是
我想知道为什么没有-f
(force)选项的git stash pop
行为应该完全像上面的单行代码。
同时,您可能希望将此单行添加为git别名:
$ git config --global --replace-all alias.unstash \
'!git stash show -p | git apply -3 && git stash drop'
$ git unstash
感谢@SamHasler指出了-3
允许通过三向合并直接解决冲突的参数。
git stash apply
如果您的工作副本很脏,Jo Factor 将不会应用隐藏的更改。因此,您可以看到git stash show -p | git apply
某种形式的强制隐藏。
我这样做:
git add -A
git stash apply
然后(可选):
git reset
git add -u
,-A
除了不添加未跟踪的文件外,这就像。
您可以通过将所需的存储导出为补丁文件并手动应用它,而不必存储当前更改,而无需存储当前更改。
例如,假设您要将stash @ {0}应用于脏树:
将stash @ {0}导出为补丁:
git stash show -p stash @ {0}> Stash0.patch
手动应用更改:
git apply Stash0.patch
如果第二步失败,则必须编辑Stash0.patch文件以修复任何错误,然后再次尝试git apply。
可以使用git reset清理工作目录,提交更改,或者如果要存储当前更改,请尝试:
$ git stash保存“当前更改描述” $ git stash pop stash @ {1}
这将存储当前更改,然后从存储堆栈中弹出第二个存储。
Mathias的解决方案绝对是最接近git stash pop --force的解决方案(实际上,请教Git开发人员,让我们已经拥有此选项!)
但是,如果您只想使用git命令做同样的事情,则可以:
换句话说,提交(我们将永远不会推送)您当前的更改。现在您的工作区已经干净了,弹出存储。现在,提交隐藏更改,作为对先前提交的修订。完成后,您现在将两组更改组合在一个提交中(“ Fixme”);只需将您的结帐重置为(“软NOT-硬,因此实际上不会丢失”),然后将结帐设置为“该提交之前一个”,现在您已经完成了两组更改,完全没有提交。
**编辑* *
我只是意识到实际上更容易。您可以完全跳过步骤3,因此...
(提交当前更改,弹出隐藏的更改,重置第一个提交以使两组更改合并到未提交状态。)
如果您像我今天那样处于这种情况,那么这些答案都不会真正起作用。不管git reset --hard
我做了多少,它都无济于事。我的回答(绝对不是官方的):
git reflog --all
我还发现Mathias Leppich的解决方案效果很好,因此我在全局.gitconfig中为其添加了别名
[alias]
apply-stash-to-dirty-working-tree = !git stash show -p | git apply && git stash drop
现在我可以输入
git apply-stash-to-dirty-working-tree
对我来说很棒。
(对于这个长别名,您的里程可能会有所不同。但是,在进行bash补全时,我喜欢一定程度的冗长。)
您有已修改但尚未提交的文件。要么:
git reset --hard HEAD (to bring everything back to HEAD)
或者,如果您要保存更改:
git checkout -b new_branch
git add ...
git commit
git checkout -b old_branch
git stash pop
我无法使其中的大多数工作。由于某种原因,它总是认为我对文件进行了本地更改。我无法应用存储,补丁无法应用,checkout
并且reset --hard
失败。最终有效的方法是将隐藏项保存为git stash branch tempbranchname
,然后进行常规的分支合并:git checkout master
和git merge tempbranchname
。从http://git-scm.com/book/en/Git-Tools-Stashing:
如果您想要一种更简便的方法来再次测试隐匿的更改,可以运行git stash分支,该分支为您创建一个新分支,签出隐匿您的工作时所做的提交,在此处重新应用您的工作,然后删除存放成功
git stash show -p | git apply
不是不同git stash apply
?