Git 吉特藏匿处:“;无法应用于脏的工作树,请进行更改“;
我正在尝试应用我先前用Git 吉特藏匿处:“;无法应用于脏的工作树,请进行更改“;,git,git-stash,Git,Git Stash,我正在尝试应用我先前用git stash pop隐藏的更改,并获得以下消息: Cannot apply to a dirty working tree, please stage your changes 关于如何处理这个问题,有什么建议吗?可以使用git reset清理工作目录,提交更改,或者,如果要隐藏当前更改,请尝试: $ git stash save "description of current changes" $ git stash pop stash@{1} $git stas
git stash pop
隐藏的更改,并获得以下消息:
Cannot apply to a dirty working tree, please stage your changes
关于如何处理这个问题,有什么建议吗?可以使用git reset清理工作目录,提交更改,或者,如果要隐藏当前更改,请尝试: $ git stash save "description of current changes" $ git stash pop stash@{1} $git stash save“当前更改的说明” $git stash pop stash@{1}
这将隐藏当前更改,然后从隐藏堆栈中弹出第二个隐藏。您有已修改但未提交的文件。要么:
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
通过将所需的隐藏导出为修补程序文件并手动应用它,您无需隐藏当前更改即可完成此操作 例如,假设您要将stash@{0}应用于脏树:
如果第二步失败,您将必须编辑Stash0.patch文件以修复任何错误,然后再次尝试git apply。当我必须将隐藏的更改应用于脏工作副本时,例如从存储中弹出多个更改集,我使用以下方法:
$ 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重置--hard,我都一事无成。我的回答(无论如何都不是官方的):
[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没有任何更改的文件。结果发现我有一个index.lock文件。删除它解决了问题。您可以通过执行
git add
来对“脏”树应用隐藏,从而对树进行清理。然后你可以git-stash-pop
并应用隐藏的更改,没问题。Mathias的解决方案绝对是最接近git-stash-pop-force的解决方案(说真的,来吧,git开发者,我们已经有了这个选项!)
但是,如果只想使用git命令执行相同的操作,可以:
git add -A
git stash apply
然后(可选):
我无法让这些大部分工作;出于某种原因,它总是认为我对文件进行了本地更改。我无法应用隐藏,修补程序不会应用,
签出
和重置--硬
失败。最后有效的方法是使用git stash branch tempbranchname
将存储保存为一个分支,然后执行正常的分支合并:git checkout master
和git merge tempbranchname
。
发件人:
如果您想要一种更简单的方法来再次测试隐藏的更改,您可以
运行git stash branch,它会为您创建一个新的分支
当你隐藏你的作品时,你所做的承诺,重新应用你的作品
如果成功应用,则删除隐藏
这对于我对一个目录进行重构(删除它,并创建一个带有其名称的符号链接)的情况来说是切实可行的。Git无法判断我的工作副本更改是什么。这非常有效。虽然我很确定我的工作树是干净的,但我无法应用隐藏。是的,我必须删除关于二进制文件的行。非常感谢。我对Git在我的本地回购协议中的奇怪行为感到失望,这与您描述的问题相同。
Git stash show-p | Git apply
不同于Git stash apply
?如果您有脏的工作副本,Git stash apply
将不会应用隐藏的更改。因此,您可以将git stash show-p | git apply
视为某种强制隐藏应用。不起作用,但有帮助:git重置磁头,然后取消存储更改。其中一个文件出现“错误:修补程序失败…修补程序不应用”。我希望它给出一个合并冲突。这个解决方案对我不起作用,它失败了,错误是:每个修改的文件的索引不匹配。不过,成功了。但这家伙想申请两个藏匿处@Elazar,你在读这个问题。OP
git reset