我在我正在处理的rails应用程序上遇到此问题。我正在开发一个功能分支,并希望从最新的主人那里重新定义。我运行了以下命令:
$ git checkout master
$ git pull --rebase
如果我尝试检出我的功能分支,我会收到以下错误:
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: Gemfile.lock
我尝试了以下命令将Gemfile.lock解析回aster,但没有一个成功:
$ git checkout -- Gemfile.lock
$ git stash
$ git reset HEAD --hard
每次我运行一个新的git命令时,我都会回到Gemfile.lock,其中的更改没有为commit提交。
以下是我正在使用的以下版本的库:
$ git --version => 2.3.3
$ bundler --version => 1.7.9
答案 0 :(得分:27)
必须在后台运行某个进程或在shell中执行git命令的一些副作用正在修改Gemfile.lock。
我不熟悉rvm的魔法(虽然听起来似乎有道理);这里有一些其他要检查的事情:
spring stop
(或bin/spring stop
或bundle exec spring stop
)以优雅地终止该过程。.git/hooks
目录。git
可能是shell中别名的另一个命令。运行alias
以查看shell别名列表。.bashrc
或.bash_profile
。答案 1 :(得分:0)
有时运行rails命令或其他bundle exec命令会以静默方式更新您的Gemfile.lock。我猜你在你的git命令之间的某个时候正在做这件事。或者你有一些奇怪的安装,这是无形的。
(rvm可以做到这一点吗?我不知道。我认为rvm会做各种奇怪的事情并且不使用它。)。
无论如何,发生这种情况的事实可能是其他事情的证据,这不是你想要的 - 你确定你试图提交的Gemfile和Gemfile.lock实际上是兼容的吗?通常,只要Gemfile发生任何变化,运行bundle install就可以获得新的Gemfile.lock。如果你试图提交一个实际上与Gemfile不兼容的Gemfile.lock ...我不知道你为什么要这样做呢,通常我想在任何给定的提交中使用Gemfile和Gemfile.lock兼容。
为了弄清楚为什么某些东西(神秘的)可能会改变你的Gemfile.lock,在Gemfile.lock上做一个git diff来看看它是如何改变的?