Git帮助UserInterfaceState.xcuserstate:警告:合并冲突:文件仍标记为冲突。

3

我有一个在Xcode 4.4.1中开发的项目,想要回到之前的分支。(请注意,分支并不复杂,但代表了线性开发)

当我选择之前的分支时,出现了一个警告。

UserInterfaceState.xcuserstate: warning: Merge conflict: File still marked as conflicted

一切看起来都很正常,但所有的构建和运行菜单项都变灰了,所以我什么也做不了。

我尝试回到最新分支,看起来没问题,但仍存在合并冲突:MyProject.xcodeproj/project.xcworkspace/xcuserdata/ian.xcuserdatad/UserInterfaceState.xcuserstate: 警告:文件仍被标记为冲突

我尝试使用git status命令,但没有帮助

# Unmerged paths:
...
#   deleted by them:    MyProject.xcodeproj/project.xcworkspace/xcuserdata/ian.xcuserdatad/UserInterfaceState.xcuserstate
#
# Changes not staged for commit:
...
#
#   deleted:    MyProject.xcodeproj/xcuserdata/ian.xcuserdatad/xcschemes/QuollEyeTree.xcscheme

我尝试了git reset HEAD,但这似乎没有帮助,我不知道该怎么办。
Git对于检查代码与先前版本的差异非常方便,但每当我尝试切换版本时都会遇到麻烦。
当我尝试创建一个工作区并添加另一个项目时,我的当前问题似乎变得更加严重。原始项目是在Xcode 3下创建的,项目和文件直接位于项目目录下。
编辑-已解决
下面的答案没有解决问题,但两者都很有帮助。
我从项目目录中保存了我的代码,并使用以下命令删除了最新的分支:
git reset --hard HEAD~1

然后将更改后的文件复制回项目目录。

我还更新了我的 .gitignore 文件(我以为之前已经更新过了)。

4个回答

16

在解决冲突后,我遇到了与你相同的问题,以下是我的解决方法。 如果您使用Xcode来跟踪git存储库,请尝试以下步骤。 1. 解决所有冲突,然后保存已解决的文件。 2. 转到“文件” - >“源代码控制” - >“标记为已解决”

很好,Xcode不再将这些文件识别为存在冲突。 希望这对某些人有用。


谢谢你!我觉得那是最好的解决方案,而且像魔法一样有效。 - ppalancica

5
当出现合并冲突时,你必须首先解决它(也许你可以运行 git merge --abort 来撤消)。因此,处理过程是打开有冲突的文件,查找冲突,解决它(编辑有冲突的行),然后保存文件,使用 git add -u 添加文件并提交。然后你就可以在一个干净的工作目录上继续工作了。顺便说一下,冲突可能看起来像:
<<<<<<< yours:sample.txt
Conflict resolution is hard;
let's go shopping.
=======
Git makes conflict resolution easy.
>>>>>>> theirs:sample.txt

参考资料:http://www.kernel.org/pub/software/scm/git/docs/git-merge.html

Git合并操作是将两个或多个分支的修改内容合并为一个新的提交。在进行合并操作时,Git会自动查找两个分支最近的共同祖先,然后将两个分支的差异应用到该祖先上,生成新的提交。如果两个分支对同一个文件进行了修改,则需要手动解决冲突。在解决完所有冲突之后,需要手动提交合并结果。


我理解如何解决冲突,但是如何针对MyProject.xcodeproj/project.xcworkspace进行操作呢?这在Xcode中没有显示。顺便说一句,这个参考资料看起来非常有用。 - Milliways
我猜你应该查看列出的不同文件,其中一个可能存在冲突。如果没有冲突,只需将它们暂存以提交(即运行git add)并提交。您可以在提交之前运行差异以确保解决冲突。如果某个文件被删除,可以对其使用git reset。我不记得具体如何使用它,但是您可以查找其参考文档。 - Vince

5

运行中

git mergetool 

解决冲突对我很有帮助。

顺便提一下,我使用Command-D来导航到冲突处,在FileMerge的右下角选择一个方案,然后在完成后使用Command-S Command-Q(在Mac上)保存并退出。


1
多年以后,我感谢您。Mergetool是我更新工作区断点文件的唯一途径。 - grantespo
对于其他人,你可以执行“git mergetool -t opendiff”命令来打开Mac的FileMerge工具。 - Matt Hudson

1
首先,养成一个好习惯,将*.xcuserstate和忽略其他用户特定项目文件的模式添加到您的.gitignore中。有一个流行的github repo用于.gitignore文件,包括Xcode项目的一个。
除了解决合并冲突(如上所述),您还应该养成一个好习惯,在检出不同的头(分支、标签等)时隐藏您的更改。

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