Git stash pop-需要合并,无法刷新索引

时间:2012-03-16 14:43:23

标签: git git-stash

我无法弹出我的藏匿处,因为我合并了一个显然与我的藏品冲突的分支,现在我的藏匿处似乎无法弹出。

app.coffee: needs merge
unable to refresh index

任何人都知道如何解决这个问题?

固定!

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

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

11 个答案:

答案 0 :(得分:55)

首先,检查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”。

这是你的两个选择。

答案 1 :(得分:13)

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

我必须做的是git stash drop摆脱它。

答案 2 :(得分:8)

它比接受的答案简单得多。你需要:

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

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

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

答案 3 :(得分:3)

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

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

首先,我们应该知道导致错误发生的原因,然后解决方案将很容易。可接受的答案已经指出了原因,但是原因不完整(也是解决方案)。

问题是,一个或多个文件以前有冲突,但是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选项可能会产生一条超级饥饿的巨龙来吃掉您过去两天的食物。

注意:尽管git restore命令尚处于试验阶段,它应该足够稳定才能被使用(由于@VonC的注释,有关该命令的更多详细信息,请参考它)。

答案 6 :(得分:0)

我发现最好的解决方案是分开你的存储并在之后做出解决方案。

git stash branch <branch-name>

如果你清除了你的藏品,你可能会丢失你的更改,你将不得不重新开始使用reflog。

答案 7 :(得分:0)

您需要将app.coffee添加到登台。

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

答案 8 :(得分:0)

这是我解决问题的方法:

  • git状态(查看来自先前存储,拉取,存储的文件混合 弹出并继续工作。)
  • git隐藏(请参阅需求合并问题)
  • git add。 (添加文件,以便我的工作在本地解决我自己合并的文件)
  • git隐藏(无错误)
  • git pull(无错误)
  • git stash pop(没有错误,可以继续工作)

答案 9 :(得分:0)

存储已被应用于其他文件。

您只需手动合并app.coffee。之后,只需运行

  

git reset

取消更改并继续进行黑客攻击。

答案 10 :(得分:0)

我遇到了同样的问题,因为我在我的开发分支中做了一些更改,然后想转到个人档案分支。所以我将更改保存在

git stash

然后在个人资料分支中,我也做了一些更改,然后想再次回到开发中,所以我必须再次存储更改,方法是

 git stash

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

git stash apply

所以我遇到了错误需要合并

首先要解决此问题,我必须通过以下方式检查存储列表:

git stash list

因此,在我的案例中,它显示了存储区列表,其中有2个存储区,存储区的名称显示如下: stash @ {0},stash @ {1}

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

git stash apply stash@{1}

所以错误需要合并

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

git status

因此给出了“都已修改”的错误 所以要解决这个问题

git add .

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

git status 

所以现在没有错误,现在可以应用隐藏

git stash apply stash@{1}

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