无法将存储应用于工作目录

我不能将存储空间应用到工作目录。

小故事:

首先,我尝试推送一些已完成的更改,但它说:“不,先不要,先拉”......好吧,我会从github中抽取所有内容,然后推送我的更改。 当我试图拉扯时,它说我的变化已经过时了,而且我应该隐藏自己的变化。 好吧,我藏起了变化......做了拉动,并推动提交的变化。 但现在,我无法恢复我正在进行的无法改变的变化。

这是错误:

MyPath/File.cs already exists, no checkout
Could not restore untracked files from stash

当然,我还不了解git的所有概念,他们让我困惑了一些......也许我做错了什么。

如果有人能够帮我解决这个问题,那将是非常棒的......我一直在搜索google和所有内容,现在已经有一个多小时了,而且我还没有找到解决方案。

非常感谢帮助。 谢谢!


这听起来像你的藏匿包括一个未跟踪的文件,随后被添加到回购。 当你尝试检查出来时,git会正确地拒绝,因为它会覆盖现有的文件。

为了解决这个问题,你可以做一些类似于删除该文件的东西(没关系,它仍然在回购中),应用你的存储,然后根据需要用in-repo版本替换文件的存储版本。

编辑:这也可能是该文件只在工作树中创建,而没有被添加到回购。 在这种情况下,不要简单地删除本地文件,而是:

  • 把它移到其他地方
  • 应用藏匿
  • 手动合并两个文件版本(工作树与移动)。

  • 正如@blahdiblah所述,您可以手动删除正在抱怨的文件,切换分支,然后手动添加它们。 但我个人更喜欢保持“在git之内”。

    这样做的最好方法是将存储转换为分支。 一旦它是一个分支,你可以使用正常的分支相关的技术/工具,你知道和喜欢在git中正常工作。 这实际上是一种有用的通用技术,即使在没有列出的错误时也可以使用。 它的效果很好,因为隐藏真的是一个提交(见PS)。

    将存储转换为分支

    下面根据HEAD在创建存储时创建一个分支,然后应用存储(它不提交它)。

    git stash branch STASHBRANCH
    

    使用“存储分支”

    你接下来要做什么取决于隐藏和目标分支(我将称之为ORIGINALBRANCH)的位置之间的关系。

    选项1 - 通常重新存储分支(自存储后进行大量更改)

    如果你在ORIGINALBRANCH上做了很多改变,那么你可能最好像任何当地分公司那样对待STASHBRANCH。 在STASHBRANCH中提交您的更改,在ORIGINALBRANCH上对其进行重新绑定,然后切换到ORIGINALBRANCH并对其进行重新绑定/合并STASHBRANCH更改。 如果存在冲突,则通常处理它们(这种方法的优点之一是可以看到并解决冲突)。

    选项2 - 重置原始分支以匹配存储(自存储后进行有限的更改)

    如果您在保留一些分阶段更改的同时将其隐藏起来,然后执行,并且您想要做的只是获得额外的更改,如果您在隐藏阶段未进行更改,则可以执行以下操作。 它将切换回您的原始分支和索引而不会改变您的工作副本。 最终结果将是您的工作副本中额外的存储更改。

    git symbolic-ref HEAD refs/heads/ORIGINALBRANCH
    git reset
    

    背景

    提交是提交喜欢分支/标签(而不是补丁)

    PS,将存储想象成一个补丁是很诱人的(就像它想把一个提交视为一个补丁一样),但是隐藏实际上是对创建时的HEAD的提交。 当你申请/流行时,你正在做一些类似于樱桃选择到你当前分支的东西。 请记住,分支和标签实际上只是提交的引用,所以在很多方面,存储,分支和标签都是指向提交(及其历史记录)的不同方式。

    有时甚至在你还没有进行工作目录更改时也需要

    PPS,你可能需要这种技术,只需使用--patch和/或--include-untracked。 即使没有改变工作目录,这些选项有时可能会创建一个藏匿,你不能仅仅申请回来。 我必须承认不完全明白为什么。 有关讨论,请参阅http://git.661346.n2.nabble.com/stash-refuses-to-pop-td7453780.html。


    最安全和最简单的方式可能会再次藏起来:

    git stash -u             # This will stash everything, including unstaged files
    git stash pop stash@{1}  # This will apply your original stash
    

    之后如果您对可能打电话的结果感到满意

    git stash drop
    

    删除您的“安全”隐藏。

    链接地址: http://www.djcxy.com/p/9825.html

    上一篇: Cannot apply stash to working directory

    下一篇: Unstaged changes left after git reset