Xcode合并Git失败,卡住了。

21
我们和朋友合作一个基于git的项目,只有一个主分支。他对一些文件进行了更改,我对其他文件进行了更改,并且很可能对几个相同的文件进行了更改。他将所有更改提交并推送到repo。然后我提交了我的更改并尝试拉取他的更改。我遇到了一些冲突,大部分都是针对他的更改进行了解决,因为它们是我没有更改的文件。当我尝试推送时,出现了致命错误:无法在合并期间进行部分提交。
这些是我得到的屏幕。 显示具有源代码控制状态的文件 提交时弹出的窗口 错误消息 我该怎么办?除了主菜单中没有显示图像(他正在处理的文件以及他处理过的类文件,以及其他一些文件),项目运行得很好。

谢谢你的回答,它帮助了我!!! - NSPratik
6个回答

20

这是一个常见的令人沮丧的情况:

  1. 打开终端
  2. 进入项目存储库文件夹(包含 .git 隐藏文件的文件夹)
  3. 通过输入 mv .git/MERGE_HEAD .git/MERGE_HEAD_STUCK 将合并头移开

你的问题应该已经解决了一半,在某些情况下,你需要从组织者那里拉取:

  1. 打开组织者 - 存储库 "文件 > 源代码管理 > 存储库…"
  2. 找到你的项目存储库并从这里进行 拉取

然后你应该能够再次在 Xcode 中使用 Git,但可能需要解决一些合并冲突,至少这将在 Xcode 中而不是在终端中进行。

注意:考虑从你的 git 存储库中删除 .DS_Store 文件


6

打开终端并使用以下命令:

查找有冲突的文件:git status

合并并解决冲突:git mergetool

您可能需要添加一些未被跟踪的文件:git add .

最后提交更改:git commit


4

在所有合并冲突解决之前,您无法提交。根据您所描述的情况,有些文件是您和其他人都修改过的。这些是必须解决的冲突。

我从未在Xcode中解决过冲突。您可以通过终端应用程序解决冲突。一旦进入终端,并假设您已安装了Xcode命令行工具,请尝试:

git mergetool
git commit

这将/应该弹出一个FileMerge窗口,让您选择您的或他的编辑。从终端另一个选项是通过简单地接受他的更改来解决冲突。这将破坏您的代码,但您可以回去修复它。尝试:

git status
git checkout --theirs -- /path/to/a/conflicted/file ...
git add -- /path/to/a/conflicted/file ...
git commit

然后编辑文件以修复您的功能。一旦所有冲突都解决了,您就可以在Xcode中提交回来。


2
当我在使用XCode时遇到问题,我会简单地转向AppCode(如果必须使用试用版),并从项目顶层文件夹提交。AppCode会检测合并场景,并解决部分合并的问题。类似地,如果AppCode无法解决问题,我会使用Github桌面版。只有当所有这些都失败了,我才会回归到低级命令。

1

Xcode有xcuserdata文件问题,我不得不放弃更改并重新提交


0

我用了一种完全不同的方法来解决这个问题,只使用了Xcode的源代码控制。

背景:另一个团队通过Beanstalk将更改推送到远程Git存储库。在我的端上,.xcodeproj文件以不同的目录方式出现,更改没有生效。后来,当我尝试提交时,在Xcode中收到了Tree Conflict错误。
Tree Conflict Screenshot

由于使用Xcode几乎不可能进行修正,因此我用从Git服务器下载的版本替换了.xcodeproj文件。结果是... Xcode项目似乎清理干净了,但所有来自损坏的Pull的更新都显示为我所做的更改,并被暂存以进行提交。 Look at all these Mods and Added files 但是,在尝试提交时,我收到了与此处讨论的相同的“fatal: cannot do a partial commit during a merge”错误。

以下是我解决问题的方法...(请注意,我是一名新手程序员,所以我的理解可能有所不足...但我的无知使我找到了另一种方法来解决这个问题。)首先,我将主分支克隆到一个辅助分支,并切换到该分支。然后,我创建了一个工作副本,并将该工作副本的目录放在原始项目目录之外。(我不知道这是否必要,但我读了其他故障排除技术。)然后我切换到主分支,在那里我意识到我所有已提交更改(缓存更改)的文件都不见了。为了确保所有文件都更新到由另一方进行的最新更改,我创建了一个名为ThirdBranch的新分支,它复制了所有文件并将其推送到Git服务器,并让Beanstalk逐行比较我的主干分支的服务器版本和我刚刚推送的ThirdBrach分支,其他一方做出的所有更改都存在于我的Xcode中。这意味着我的主仓库和Git主仓库是相同的,这证实我只使用Xcode解决了问题。

不要问我如何做到的,除了我刚才描述的内容之外...并且一定要填补我留下的空白。我是新手,我不理解所有的东西。也许有经验的程序员可以将无关的信息与相关的信息分开,并更清晰地重新创建这个技术,这也是我发布这篇文章的部分原因。

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