合并分支到主分支后出现的Xcode和git问题

3
我会尝试梳理一下过去几天发生的事情。请注意,这个项目只有我一个人在开发。我在GitHub上跟踪所有的问题/待办事项。我有很多功能分支,其中一些已经过期,永远不会合并,但是我保留它们以供参考。
问题始于我尝试将“develop”分支合并到“master”分支。出现了奇怪的合并冲突。我添加了一个新文件到项目中,对该文件进行了修改,然后将该文件重命名。我提交了一个“develop”的commit,并将其推送到GitHub。我没有预料到会因为这个而产生合并冲突,但事实却是如此。
我总是在Xcode之前在GitHub上检查/预览合并冲突。
在GitHub上,我通过比较“Master” <- “Develop”来检查冲突。GitHub报告存在冲突,因此我在GitHub上发起了一个拉取请求以进行调查。
冲突出现在一个名为“PlannerNote.xcodeproj/project.pbxproj”的文件中,看起来像这样(无法再看到冲突):
<<<<<< Develop
3D1A5668256AC9B700AB319C /* AppearanceTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D1A5667256AC9B700AB319C /* AppearanceTableViewController.swift */; };
==========
>>>>>>> Master

“奇怪的是,在主分支master中没有冲突的代码。毕竟,这个文件是作为一个新功能添加的。”
“按照我的惯常工作流程,我尝试在Xcode中完成所有的git操作,因为如果我使用git cli会发生奇怪的事情。所以,我现在的计划是尝试通过xcode合并,然后在xcode中修复冲突。我就是这样做的。我进入了一个文件比较界面,冲突被标记出来了。奇怪的是,比较的两边显示的代码完全相同。我可以选择左边或右边,我选择了左边。顺便说一下,我甚至可以通过GUI看出哪个文件属于哪个分支。”
“无论如何,冲突似乎已经被解决了,合并也成功了。此时,我在master分支上,并将其推送到GitHub。然后,我对master进行了更改,其中我增加了版本号(由于某种原因,我总是在主分支上进行版本升级),并提交并推送。”
“现在真正的奇怪现象开始了。”

首先,在GitHub的master分支中,似乎我的整个.gitignore文件都被忽略了。项目中的每个文件都被添加并推送。不需要跟踪的项目生成文件,所有的pod文件以及整个fastlane目录都被添加了,还有谁知道什么其他的东西。所有这些都应该被忽略。我正在使用这个.gitignore

GitHub sceenshot

第二步,回到Xcode我尝试切换回develop,结果出现了这个: can't switch to devlop 我记不清楚在stackoverflow上找到的确切解决步骤了,但大致是这样的,删除DerivedDataxcuserdata,并且有一些变体的git reset ... 然后我遇到了这个问题,通过试验各种stackoverflow的建议来解决: enter image description here 所以现在我可以从master切换到develop。但是当没有进行任何更改时,我无法切换回“master”,会收到以下警告: enter image description here

从终端输入git status显示: git status 应忽略Pods/Podfile.log应该早就被添加和跟踪了。 我不太确定PlannerNote.xcworkspace/

总的来说:

  1. 我有成千上万个文件在我的仓库中被跟踪,但它们不应该被跟踪。我想要将它们删除。
  2. 我无法切换回master分支。
  3. 每次我认为我解决了一个问题,另一个问题就出现了。

可能的解决方案

  1. 手动删除所有不应被跟踪的文件。
  2. 一些超出我对git理解的神奇操作。
  3. 删除git,完全删除我的远程仓库,并从头开始。(但失去这个项目的历史记录会很糟糕)
  4. 从主分支创建一个新分支,并将该新分支设置为主分支。

实际上:

我不知道该怎么办。开发停滞不前,每次我认为自己已经重新开始了,就会遇到新的问题让我无法继续。
有什么建议吗?
编辑:附加信息
这两个屏幕截图展示了masterdevelop之间的目录/差异。请注意在Master中添加的所有文件夹/文件。不确定是如何发生的。这也使我不敢在未清理master的情况下从master更新developMaster branch develop branch 我还尝试了在这里找到的解决方案。

除了Xcode/CLI之外,您使用哪种Git客户端可以帮助您逐步理解提交/合并的内容,以便了解每个步骤中添加或丢失了什么?特别是您认为导致这些问题的最近更改。尝试使用类似https://gitup.co/的工具,它可以帮助您以简化的形式可视化分支/提交/合并,以便您可以轻松地跟踪和理解。 - Tarun Tyagi
我只在终端和Xcode中使用git。对于这些项目,我尽量只在Xcode中工作。当我在一些iOS测试/学习项目中仅使用终端时,似乎效果不佳,因此我坚持只使用Xcode,除非遇到Xcode无法处理的情况,例如git reset... 我有GitHub桌面应用程序,但已经好几年没用了。我会去看看gitup.co。 - Mox
1个回答

1
我以前也遇到过类似的情况。此时最好不要花太多时间解决git问题,这种方式有点难以帮助。你的问题无法远程精确定位。
我建议你采取以下方法:
  • 检查您当前的分支 bad masterlast develop commit。返回到稳定的主分支。

  • 然后尝试向主分支发起 pull request。查看比较结果。只需转到 GitHub 并手动将更改复制/粘贴到新文件或现有文件中。按下ctrl+I以修复任何缩进问题。

  • 忽略 cocoapod 的更改,因为 pod install 只会恢复这些部分。不需要复制/粘贴这些内容。

  • 进行小的提交。确保如果您添加了一个新文件,则同时提交项目文件的更改。

  • 还要学习如何在冲突时使用 git mergetool。确保它设置为使用 Xcode 的内置合并冲突解析器,即它设置为使用 FileMerge。请参见 herehere。这是一个非常简单的工具。您说:“顺便说一句,我甚至可以通过 GUI 看出哪个文件属于哪个分支。” 左侧是您当前的分支。右侧是您要合并的分支。最常见的例子是,左侧是您的开发分支,右侧是您的主分支。


1
这基本上是我采取的路线,尽管我确实不得不进行一些git重置操作。我评论的真正原因是我采纳了您的建议并设置了git mergetool以使用FileMerge,这使生活更轻松。因此,我也建议其他人在真正需要之前配置git mergetool并知道如何使用它。 - Mox

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