【发布时间】:2017-06-22 20:38:41
【问题描述】:
我只使用 Xcode 8.2.1 的本地存储库。这是一场单人秀,我是唯一一个修改代码的人。多年来,我在 GIT 中创建了一系列子分支,如下所示:
master
branch1
...
branch14
branch14.1
...
branch 14.13 //added lots of new code/classes
branch 14.13.NewCombatReports //refactor 1 class into 2
在 14.13 中,我通过使用 xcode 的“新建文件”选项和创建新类添加了很多新类。一旦我有了功能,我创建了一个子分支 14.13.NewCombatReports,以隔离重构其中一个较大的类(将一大块代码分离到它自己的新类 BattleManager.m/h 中)。
当我满意后,我提交了更改,然后尝试合并到父分支。我收到一条错误消息:
由于一个或多个树冲突,无法执行该操作。 BattleManagerClass.h 和 BattleManagerClass.m 文件存在树冲突
根据类似 SO 问题的建议,我在 BattleManager* 所在的同一目录中运行 git status,结果返回:
On branch master.DevMain.14.13.newCombatReports
Untracked files:
(use "git add <file>..." to include in what will be committed)
../CloudKitHelperClass (xxxxxxxx's conflicted copy 2016-11-18).m
../yyyyyy.xcodeproj/project.xcworkspace/xcuserdata/thunk.xcuserdatad/.gitignore
../yyyyyy.xcodeproj/project.xcworkspace/xcuserdata/thunk.xcuserdatad/UserInterfaceState (xxxxxxxx's conflicted copy 2016-11-18).xcuserstate
../yyyyyy.xcodeproj/xcuserdata/thunk.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
nothing added to commit but untracked files present (use "git add" to track)
这些似乎都与新的 BattleManager 类无关。在苦苦挣扎之后,并没有真正理解我在 GIT 中所做的事情,我最终从 xcode 项目中删除了该类,并将 BattleManager 文件移至 ~/tmp。我提交了更改,然后成功地将 14.13.NewCombatReports 中的其余更改合并回 14.13。那时,我将新的 BattleManager 类重新添加回 14.13 并重建。一切都很好,至少我是这么认为的。
当我随后尝试将 14.13 合并到 14 时,我遇到了大量的树冲突,抱怨我在 14.13 中添加的每个类文件。
所以我显然做了一些根本错误的事情,以至于当我尝试向上合并包含净新文件的分支时,GIT 不喜欢它。我不是很了解GIT的工作原理,看不懂:
- 试图在本地存储库的上下文中告诉我什么是“树冲突”错误?我不明白我当前的修订与什么冲突。
- 如何修复它,以便我可以向上合并包含新文件的分支?
这个问题看起来很像Xcode merge branch,remind tree conflict when add some new file。 cmets 链接到:The operation could not be performed because "PROJECTNAME" has one or more tree conflicts,其中谈到了尝试协调本地和服务器版本之间的目录结构。由于我不是在与服务器打交道,因此我不明白如何应用该建议。
【问题讨论】:
-
想解释一下否决票?