针对此种情况,一般不会是某处代码合并冲突,而基本是合并双方对文件有删除、移动和增加导致project.pbxproj 文件同时被修改而冲突并且在推送到服务器前并未解决此冲突而导致。
当然良好的习惯一般是合并先存本地运行一遍没问题之后再提交服务器,这种状况下打不开方便本地回退重新合并。但是难保万一服务器不小心push上去了,代码被破坏了。不过也别急,也可以使用以下方法回退合并,并且保留双方代码。
原理:在推送代码的分之上(比如develop分支 合并之前本地节点版本号为A,服务器版节点版本号为B),在A节点和B节点 分别创建一个分支,并且推送到服务器(用于保存合并前的代码)。然后删除develop本地和服务器分支。然后在B (或者A具体使用哪个,看你的心情,但是一般按照之前的规则一般选择B)分支上创建一个分支重新取名叫develop,push到服务器。现在develop重新持有服务器合并之前B节点的代码(相当于合并前服务器的状态)。然后将A节点重新来一次合并操作,切记不要再未解决冲突直接推送到服务器了,否则得重新来一遍了。
如果你使用图形界面工具,例如sourcetree的话,或者对git 的命令熟悉的话,按照原理基本可以到此为止了。
但是如果你对命令不熟悉,那请看下面(在命令行工具中操作)
所有操作请注意当前属于哪个分支:git branch -a 查看服务器分支。git branch 查看本地分支,当前所在分支会在分支前带有*号标记或者明显的颜色标记
git checkout bug1.7.0 则切换当前分支到bug1.7.0.
1.找到最后一次提交到master分支的版本号,即【merge前的版本号】例如
2.回退到某个版本号(假如B为服务器合并前代码,A为本地合并前代码)
git reset--hard B
这个时候已经回退到了上一次提交的版本,但是之后的修改还是存在此时的develop分支上,以下步骤很关键
3.重新创建一个newB分支,这时候的分支就是上一次提交的B的代码
git checkout-b newB
4.推到对应的远程newB上
git push
5.重复 2-4步骤回退到A 并且创建分支newA并提交
git reset--hard A
git checkout-b newA
git push
6.这个时候相当于备份了A和B,接下来就可以删除本地及远端的分支
git branch-d develop
git push--delete origin develop
7.从newB分支,重新在创建develop分支,并推向远端
git checkout-b develop
git push
8.重复6的操作删除 newB分支,然后develop分支就恢复到合并前的状态了,分支名不变。
然后将newA重新合并到develop就好了。