无法结帐到其他分支机构,因为被忽略的文件有本地更改?

时间:2014-08-04 12:40:50

标签: git

我明白了:

$ git checkout mybranch
error: Your local changes to the following files would be overwritten by checkout:
        .idea/workspace.xml
Please, commit your changes or stash them before you can switch branches.
Aborting

.idea/已经在.gitignore。如果我git status,则也不会显示任何更改。

请建议。

更新

感谢您的建议。我希望我可以去mybranch检查,但我不能,因为它不允许我切换!如果忽略.idea/(它们是来自IDE的项目配置文件)是正确的行为,我现在该怎么办? 我的目标是转到mybranch并将其与master合并。您可以将mybranch视为生产分支,将master视为dev分支。现在我想更新prod,因为master足够稳定。

6 个答案:

答案 0 :(得分:4)

就我而言,这是由于我以前的

git update-index --assume-unchanged <filename>

该文件存在冲突。通过

撤消这种情况
git update-index --no-assume-unchanged <filename>

并且提交了新的状态,一切都已修好。

更新:修复参数中的拼写错误。

答案 1 :(得分:1)

检查您正在检查的分支的.idea/中是否还存在.gitignore,而不是您目前所在分支的分支。

解决方案是隐藏对.idea/workspace.xml文件所做的更改,结帐到您的mybranch,然后将.idea/文件夹添加到.gitignore,切换回{ {1}}分支,然后应用隐藏的更改,然后合并两个分支。

答案 2 :(得分:1)

两个答案都是正确的。但是git stash不起作用,因为它不会隐藏对workspace.xml所做的更改,这会被忽略,或者workspace.xml已经在树的其他地方被更改了。

我做的是将repo克隆到其他地方,checkout到mybranch,编辑gitignore,提交然后从master合并。

答案 3 :(得分:0)

.idea/位于您当前分支的.gitignore中。 git status给出的数据与此一致。您确定.idea/位于.gitignore的{​​{1}}吗?

如果mybranch包含mybranch,那么当您结帐时,此文件将被覆盖 - 即使它当前已被忽略。


修改

您可以暂时将.idea/workspace.xml移到其他地方来解决限制问题,例如:将其移至.idea/workspace.xml。然后结帐.idea/workspace.xml.old,看看发生了什么 - mybranch中的内容,.gitignore中的内容。一旦看到发生了什么,您就可以轻松地将文件移回。

或者你也可以尝试.idea/workspace.xml,但在你弄清楚发生了什么之前,避免增加额外的复杂性可能是明智的。

答案 4 :(得分:0)

关于相同的文件,我得到了相同的信息: $ git checkout thatbranch error: Your local changes to the following files would be overwritten by checkout: wwwroot/js/intake/some-file.js Please, commit your changes or stash them before you can switch branches. Aborting

我可以结帐其他任何分支,但thatbrach则没有问题。 我去了那条路,git status的结果是它是最新的。 我做了git stash,并收到一条消息,说没有本地更改。

最后,我做了每位软件工程师的工作:重新启动计算机-这也无济于事。

我再次走到那条路径,并删除了some-file.js并再次进行了结帐-这次可以了。以防万一我确实拉动了一切以确保一切正常并且是最新的。

那解决了我的问题。

答案 5 :(得分:0)

我在远程GitHub Enterprise上遇到了同样的问题。我转到GitHub Web界面并创建了一个pull请求,以将我的分支合并到master。由于没有本地我的工作区.xml更改,因为它们被忽略了,因此允许拉取请求并进行合并。合并和拉动之后,我能够再次在本地切换分支。