Xcode:“工作副本 ____ 有未提交的更改” vs. git status:“没有要提交的内容,工作目录干净”。

36
在Xcode 5.0.2中,我尝试从远程拉取并收到以下消息:“工作副本'project-name'有未提交的更改。提交或放弃更改然后重试。”好吧,我打开提交对话框,然后收到消息:“此文件在请求的版本中不存在。”点击“确定”后进入提交对话框。(右窗格中没有显示版本,可能是因为我收到了最近的消息。)选择平面视图,我发现只有一个修改过的文件:project.pbxproj。我输入提交消息并单击“提交1个文件”。然后当我去拉取时,我发现我正处于与之前完全相同的位置-出现相同的消息,无论我进行多少次提交,都无法拉取(或推送)。好奇心驱使下,我运行git diff以查看究竟发生了什么变化。结果是什么也没有变。git status提供的输出同样没有帮助:nothing to commit, working directory clean。从命令行执行git pushgit pull?没错,这些都可以正常工作。
为什么Xcode会坚持认为我在工作目录中进行了更改?为什么它不告诉我更改的内容?已尝试重新启动Xcode和系统。虽然我很高兴我还有一些方法可以推送和拉取,但如果Xcode git集成表现良好将会非常好。有任何想法吗?
我发现了一些类似的问题,但没有一个解决这个特定问题(或提供可接受的解决方案)。

2
git reset --hard 会有帮助吗?(如果您的工作树中没有任何私人文件) - VonC
1
没有区别,@VonC。 - GarlicFries
我也在Xcode 5上遇到了完全相同的问题,感到很苦恼。希望有一种解决方法。我需要切换回本地分支以继续开发。 - Robert J. Clegg
尝试使用“-f”标志来进行强制操作,例如git checkout -f master - turingtested
6个回答

76

好的,我解决了我的问题。

打开Xcode:

  1. 打开终端 - cd / 到您的项目目录。
  2. 输入:"git reset --hard"
  3. 输入 git status

重新启动Xcode并进行提交(只是一条评论或其他内容)

重复上述步骤。

这样就解决了我的问题。


谢谢,@Tander。正如在问题的评论中建议的那样,然而,那并没有解决我的问题... - GarlicFries
2
在我的情况下,"git reset --hard"步骤足以解决问题。谢谢@Tander。 - Kqtr
6
没问题 @Kqtr - 令人惊讶的是,四年过去了,这个问题在最新版本的 Xcode 中仍然存在。 - Robert J. Clegg
每次我在Xcode中点击某个东西时,它都会更改我的用户数据文件,因此我不得不在每次移动到未存储操作后执行git reset --hard。回想起来,也许我只需要在取消存储之前重置一下,但是为了让其他人知道,在Xcode中更改视图或单击UI将刷新您的IDE并更新您的用户数据文件。 - Heinous Games

8

您需要使用命令行 git 进行修复。在终端中进入您的工作文件夹,输入以下命令:

git status

这将展示哪些文件有未提交的更改。例如,Crashlytics会在您运行它时自动更新,并且即使使用Xcode / Source Control / Discard Changes也无法摆脱它。

一旦您看到具有未提交更改的文件(忽略已添加的文件),请使用:

git checkout -- Folder/filename.ext

这与Xcode中的“放弃”相同。

完成后,返回到Xcode,您应该能够切换分支。


3
xCode非常差劲。每次查看文件时,一个名为UserInterfaceState.xcuserstate的文件都会更改。在xCode本身的概述中看不到它,但可以通过命令行查看。
快速修复:
1.打开终端
2.CD到您的项目目录,并键入以下内容:
3.git add .
4.git commit -m“提交”
5.git push origin master

我们如何排除文件? - JCutting8
@JCutting8 不知道,我不应该推荐它,也许你的用户界面已经消失了。 - J. Doe

0

请尝试以下操作:

步骤1:

git rm --cached ProjectName.xcodeproj/project.xcworkspace/xcuserdata/username.xcuserdatad/UserInterfaceState.xcuserstate

步骤2:

git commit -m "Removed file that shouldn't be tracked"

0

很遗憾,最佳答案对我没有用,因为我有未被跟踪的git文件。

要解决这个问题,请在终端中进入您的工作文件夹,输入:git status

这将显示未被git跟踪的文件。现在使用以下命令添加每个文件:

git add <file with location>

你应该能够从git status打印出的内容中复制文件位置并粘贴。


0

应用程序代码解决方案:

  1. 在终端中确认 git 状态:

    git status

  2. App Code 中打开 'yourProject.xcworkspace'

  3. VCS > Git > Branches...

  4. 远程分支 > yourBranch > 作为新的本地分支检出

  5. 通过终端确认修复:

    git status


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