【问题标题】:Git stash pop- needs merge, unable to refresh indexGit stash pop-需要合并,无法刷新索引
【发布时间】:2012-04-02 02:51:43
【问题描述】:

我无法弹出我的存储,因为我合并了一个明显与我的存储冲突的分支,现在我的存储似乎无法弹出。

app.coffee: needs merge
unable to refresh index

有人知道如何解决这个问题吗?

已修复!

事实证明,实际问题是合并中未解决的合并冲突,不是存储会导致合并冲突。

解决方案:提交冲突的文件。

【问题讨论】:

  • 有趣的是,接受的答案是复杂,而实际的解决方案非常简单:您甚至不必提交冲突的文件,而是添加它。
  • 将您的答案添加为不在问题中的答案。
  • @Javi 你是对的,这很有趣。

标签: git git-stash


【解决方案1】:

首先,检查git status
正如 OP 所提到的,

实际问题是合并中未解决的合并冲突,而不是存储会导致合并冲突。

这就是git status 将该文件称为“both modified”的地方

解决方案:提交冲突的文件。


解决方案:在这种情况下,只需添加并提交您的本地文件。


您可以在 4 天前 在撰写此答案时(2012 年 3 月 13 日)通过以下帖子找到类似的情况:“‘Pull is not possible because you have unmerged files’”:

julita@yulys:~/GNOME/baobab/help/C$ git stash pop
help/C/scan-remote.page: needs merge
unable to refresh index

您所做的是修复合并冲突(编辑正确的文件并提交):
见“How do I fix merge conflicts in Git?

博文作者所做的是:

julita@yulys:~/GNOME/baobab/help/C$ git reset --hard origin/mallard-documentation
HEAD is now at ff2e1e2 Add more steps for optional information for scanning.

即完全中止当前合并,允许应用git stash pop
见“Aborting a merge in Git”。

这是你的两个选择。

【讨论】:

  • 有时我们在另一个分支中也会发生这种情况。例如,我有分支 A 并进行了一些更改并切换到分支 B 并进行了更改并提交了它们。现在我想去分支 A 但忘记在 A 上结帐并尝试应用存储。在这种情况下,它也给出了同样的问题。我在上述案例中遇到了这个问题。
  • 我提交了所有内容,但 'git bash pop' 带回了这些冲突。当我不想对当前的 bach 进行更改时,我不明白为什么我必须提交。我只想回到隐藏的分支。
  • @PhilipRego git bash pop?还是 git stash pop?尝试检查 stash 而不是使用 git stash:stackoverflow.com/a/16625128/6309
  • 抱歉的意思是“git stash pop”。我已经放弃了存储,但是下次遇到此问题时我会尝试。谢谢
【解决方案2】:

这是我解决问题的方法:

  • git 状态(查看来自先前存储、拉取、存储的混合文件 流行音乐,并继续工作。)
  • git stash(见需求合并问题)
  • git 添加。 (添加文件,以便我的工作在本地解决我自己的合并)
  • git stash(无错误)
  • git pull(没有错误)
  • git stash pop(没有错误并继续工作)

【讨论】:

  • 谢谢!这对我有帮助。
  • 优秀,git add . 无需提交即可为我解决问题。
【解决方案3】:

我遇到了这个问题,然后解决了冲突并提交,再次执行 git stash pop 再次恢复相同的存储(导致相同的冲突 :-( )。

我必须做的(警告:首先备份你的存储)是 git stash drop 来摆脱它。

【讨论】:

  • 这只是摆脱了我的藏匿处。我想回到过去。
  • 这是我需要的答案,但对于看到这个的其他人,您将丢失隐藏的更改。如果您在第一个存储时遇到问题,但又真的想摆脱第一个存储以应用更深层次的第二级存储更改,这将很有帮助。
【解决方案4】:

它比公认的答案简单得多。您需要:

  1. 检查git status 及其下的未合并路径。修复冲突。如果您想稍后再做,可以跳过此步骤。

  2. 使用git add <filename>将未合并路径下的所有这些文件添加到索引。

  3. 现在做git stash pop。如果您遇到任何冲突,这些将再次需要解决。

【讨论】:

  • 这会导致同样的冲突一次又一次。
【解决方案5】:

如果有人在合并/冲突/操作之外遇到此问题,则可能是您的项目的 git lock 文件导致问题。

git reset
     fatal: Unable to create '/PATH_TO_PROJECT/.git/index.lock': File exists.
rm -f /PATH_TO_PROJECT/.git/index.lock
git reset
git stash pop

【讨论】:

  • 有点害怕reset 命令。你能解释一下为什么会这样吗?
【解决方案6】:

好吧,最初,我们应该知道导致错误发生的原因,然后解决方案将很容易。接受的答案已经指出了原因,但它在某种程度上是不完整的(也是解决方案)。

问题是,一个或多个文件之前存在冲突,但 Git 认为它们未解决。是的,您可能已经编辑了这些文件并解决了冲突,但 Git 不知道这一点。你应该告诉 Git “嘿,之前的合并没有更多冲突了!”。请注意,合并不一定是由 git merge 引起的,也可能是由 git stash pop 引起的,例如。

记住,git status 可以告诉你 Git 现在知道什么。如果 Git 存在一些未解决的合并冲突,那么它会显示在单独的 Unmerged paths 部分中,文件标记为 both modified(总是?)。如果您已经注意到,此部分介于两个暂存部分和未暂存部分之间。由此,我个人理解,“未合并的路径是您应该移动到暂存区域或未暂存区域的路径,因为 Git 只能在这两个区域中工作”。

因此,要告诉 Git 冲突已解决,您应该将这些更改移动到暂存区域或未暂存区域。在最新版本的 Git 中,当您执行 git status 时,它会告诉您如何操作(哇!您应该问问自己,您怎么还没见过这个?):

$ git status
...
Unmerged paths:
  (use "git restore --staged <file>..." to unstage)
  (use "git add <file>..." to mark resolution)
        both modified:   path/to/file.txt
...

所以,暂存它(并可能提交它):

$ git add path/to/file.txt

并使其不分阶段(例如,您现在不想提交):

$ git restore --staged path/to/file.txt

注意:如果没有使用好的文本编辑器或 IDE,忘记写 --staged 选项可能会产生一条超级饥饿的龙来吃掉你过去两天。 p>

注意:虽然git restore 命令仍处于实验阶段,但它应该足够稳定以供使用(感谢@VonC 的评论,有关详细信息,请参阅它)。

【讨论】:

【解决方案7】:

git reset 如果您不想提交这些更改。

【讨论】:

    【解决方案8】:

    我发现最好的解决方案是分支你的存储,然后再做一个解决方案。

    git stash branch &lt;branch-name&gt;

    如果你放弃清除你的存储,你可能会丢失你的更改,你将不得不重新访问 reflog。

    【讨论】:

      【解决方案9】:

      您需要将app.coffee 添加到暂存中。

      执行git add app.coffee,然后您将能够应用您的存储(在提交和推送之后)。

      【讨论】:

        【解决方案10】:

        我遇到了同样的问题,因为我在开发分支中做了一些更改,然后想转到配置文件分支。所以我将更改隐藏了

        git stash
        

        然后在配置文件分支中我也做了一些更改,然后想再次回到开发中,所以我必须再次隐藏更改

         git stash
        

        但是当我来开发分支并尝试通过 git 存储更改时

        git stash apply
        

        所以我得到错误需要合并

        首先要解决这个问题,我必须检查存储列表

        git stash list
        

        所以它在我的例子中显示了 stash 的列表,有 2 个 stash 的名称显示如下 stash@{0},stash@{1}

        我需要从 stash@{1} 进行更改,所以当我尝试通过此命令获取它时

        git stash apply stash@{1}
        

        所以得到错误需要合并

        现在要解决此问题,请检查文件的状态

        git status
        

        所以它给出了“都修改”的错误 所以要解决这个运行

        git add .
        

        它将添加丢失的修改文件 现在再次检查状态

        git status 
        

        所以现在没有错误现在可以应用存储

        git stash apply stash@{1}
        

        您可以对任意数量的存储文件执行此过程。

        【讨论】:

          【解决方案11】:

          存储已应用于其他文件。

          只有app.coffee 需要手动合并。然后运行

          git 重置

          取消暂存更改并继续修改。

          【讨论】:

            猜你喜欢
            • 2012-12-25
            • 1970-01-01
            • 2014-04-08
            • 2017-11-25
            • 2013-02-23
            • 1970-01-01
            • 1970-01-01
            • 2012-01-20
            相关资源
            最近更新 更多