与git和Gemfile.lock相关的问题

46

每次我想要执行git pull或者切换到一个新的分支时,我经常遇到以下关于我的Gemfile.lock的错误。

error: Your local changes to the following files would be overwritten by merge:
    Gemfile.lock
Please, commit your changes or stash them before you can merge.
Aborting

问题在于我无法弄清如何修复它。

  • 将文件藏起来不起作用--本地更改仍然存在,原因不明。
  • 我也试过运行git checkout -- Gemfile.lock来舍弃更改,但那也不起作用--本地更改仍然存在。
  • 我还尝试创建一个新分支并将Gemfile.lock更改提交到该分支中...但那也不起作用。更改仍然存在!

我需要做什么?我已经走到了只能克隆一个新的git repo 的地步,但很快,所有这些问题又出现了。


Pavan:不行,隐藏操作没起作用。我运行了 git stash 命令,但是 Gemfile.lock 文件还是神奇地留在那里 :/ - grautur
在未跟踪的文件或修改过的文件下? - Pavan
Pavan:在修改的文件下。 - grautur
5个回答

110

这种情况也发生在我身上,接受的答案中 git reset --hard HEAD 并没有帮助。不过,运行 spring stop 就解决了问题。我怀疑 spring 在每次修改文件时都会重写该文件,以确保它与通过 spring 运行的代码同步。


2
谢谢您,先生!这节省了我很多麻烦! - mrodrigues
这对我有效:),看起来是Spring的问题,当我们写Spring stop和git checkout Gemfile.lcok时它就可以工作。 - Arvind
这种回答让我非常喜欢这个社区。再次为我节省了大量时间! - Maruccio

9
在进行以下操作后,我能够再次拉取和检查分支。
git checkout Gemfile.lock
git reset --hard HEAD

我不确定为什么和这个解决方案是如何工作的。欢迎解释。 在我的情况下,git检测到Gemfile.lock已被修改的原因是文件底部有。更新bundler 后,重新生成并提交Gemfile.lock,它就不会在git中显示为已修改。 git版本为2.2.1,Mac OSX版本为10.10.4,iTerm2 Build 2.9.20150624-nightly(带有shell集成)。

运行gem update bundler后,对我起了作用。 - undefined

1

由于 Spring 在后台同步您的开发环境中的代码,因此您无法检出 Gemfile.lock。如果要检出,请首先停止 spring 进程。您可以通过两种不同的方式停止 spring。

  1. 您可以在终端中使用命令直接停止 spring

spring stop

  1. Or by manually killing the processes of spring running on local, just like

    ps -aef | grep spring
    kill -9 pid
    

两者对我来说都很好。选择对你更好的!


0
我也遇到了这个问题,通过在VSCode上禁用Ruby LSP扩展,我最终成功地将主分支合并到了我的功能分支上。

0

我曾经遇到同样的问题。

对于我来说,重定基分支可以解决这个问题。 git rebase origin "远程分支"


目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Vikram Parimi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接