我明白了:
$ 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足够稳定。
答案 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更改,因为它们被忽略了,因此允许拉取请求并进行合并。合并和拉动之后,我能够再次在本地切换分支。