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

Ran*_*llB 97 git git-stash

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

app.coffee: needs merge
unable to refresh index
Run Code Online (Sandbox Code Playgroud)

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

固定!

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

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

Von*_*onC 57

首先,检查一下git status.
正如OP提到的,

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

那就是git status把文件称为" both modified"

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


您可以在撰写此答案(2012年3月13日)时发现类似的情况4天前发布此帖:" '拉不可能,因为您有未合并的文件' ":

julita@yulys:~/GNOME/baobab/help/C$ git stash pop
help/C/scan-remote.page: needs merge
unable to refresh index
Run Code Online (Sandbox Code Playgroud)

你所做的是修复合并冲突(编辑正确的文件,并提交它):
请参阅" 如何修复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.
Run Code Online (Sandbox Code Playgroud)

即完全中止当前合并,允许git stash pop应用.
请参阅" 在Git中中止合并 ".

这是你的两个选择.

  • 有时我们也会在另一个分支机构。例如,我有分支 A 并进行了一些更改,然后切换到分支 B 并进行了更改并提交。现在我想去 A 分行,但忘记在 A 上结帐并尝试应用存储。在这种情况下,它也给出了同样的问题。我在上述案例中遇到了这个问题。 (2认同)

Ada*_*dam 20

这是我解决问题的方法:

  • git status(查看来自之前的 stash、pull、stash pop 和继续工作的文件的混合。)
  • git stash(请参阅需求合并问题)
  • git 添加。(添加文件,以便我的工作在本地解决我自己的合并问题)
  • git stash(没有错误)
  • git pull(没有错误)
  • git stash pop(没有错误并继续工作)

  • 太棒了,“git add .”没有提交就为我解决了问题。 (5认同)

kno*_*cte 13

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

我要做的就是git stash drop摆脱它.

  • 那只是摆脱了我的藏身之地。我想回到它。 (2认同)
  • 这是我需要的答案,但是对于其他看到此问题的人,您将失去自己的秘密更改。如果您在第一个存储区方面遇到问题,但确实想摆脱第一个存储区以应用更深层次的第二个隐藏存储区更改,这将很有帮助。 (2认同)

ayu*_*hgp 8

它比公认的答案简单得多.你需要:

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

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

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

  • 这会一次又一次地导致同样的冲突. (3认同)

MAC*_*rha 7

好吧,首先我们应该知道错误的根源,那么解决问题就会变得很容易。接受的答案已经指出了原因,但它在某种程度上不完整(也是解决方案)。

问题是,一个或多个文件之前存在冲突,而 Git 仍然将它们视为未解决。尽管您可能已经编辑了这些文件并解决了冲突,但 Git 并不知道。

在这种情况下,您应该通知 Git:“嘿,之前的合并没有冲突!”。请注意,合并不一定是由 a 引起的git merge,也可能是由 a 引起的git stash pop可以是由 a 引起的。

一般来说,git status可以告诉你 Git 现在知道什么。如果 Git 存在一些未解决的合并冲突,则会显示在单独的Unmerged paths部分中,并将文件标记为both modified(总是?)。如果您注意到了,此部分位于两个已暂存部分和未暂存部分之间。这意味着,未合并的路径是您应该移动到暂存或非暂存区域的路径,因为 Git 只能使用这两个区域.

即使在最新版本的 Git 中,当您执行 a 时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
...
Run Code Online (Sandbox Code Playgroud)

因此,要暂存它(并且可能提交它):

git add path/to/file.txt
Run Code Online (Sandbox Code Playgroud)

并使其取消暂存(例如,您现在不想提交它):

git restore --staged path/to/file.txt
Run Code Online (Sandbox Code Playgroud)

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

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


小智 5

如果有人在合并/冲突/操作之外遇到此问题,则可能是导致该问题的项目的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
Run Code Online (Sandbox Code Playgroud)

  • 有点害怕“重置”命令。你能解释一下为什么这会起作用吗? (2认同)