? ? ? ?針對此種情況钝满,一般不會是某處代碼合并沖突畦木,而基本是合并雙方對文件有刪除袖扛、移動和增加導(dǎo)致project.pbxproj 文件同時被修改而沖突并且在推送到服務(wù)器前并未解決此沖突而導(dǎo)致。
當(dāng)然良好的習(xí)慣一般是合并先存本地運行一遍沒問題之后再提交服務(wù)器,這種狀況下打不開方便本地回退重新合并蛆封。但是難保萬一服務(wù)器不小心push上去了唇礁,代碼被破壞了。不過也別急惨篱,也可以使用以下方法回退合并盏筐,并且保留雙方代碼。
原理:在推送代碼的分之上(比如develop分支 ?合并之前本地節(jié)點版本號為A砸讳,服務(wù)器版節(jié)點版本號為B)琢融,在A節(jié)點和B節(jié)點 分別創(chuàng)建一個分支,并且推送到服務(wù)器(用于保存合并前的代碼)簿寂。然后刪除develop本地和服務(wù)器分支漾抬。然后在B (或者A具體使用哪個,看你的心情常遂,但是一般按照之前的規(guī)則一般選擇B)分支上創(chuàng)建一個分支重新取名叫develop纳令,push到服務(wù)器。現(xiàn)在develop重新持有服務(wù)器合并之前B節(jié)點的代碼(相當(dāng)于合并前服務(wù)器的狀態(tài))烈钞。然后將A節(jié)點重新來一次合并操作泊碑,切記不要再未解決沖突直接推送到服務(wù)器了,否則得重新來一遍了毯欣。
如果你使用圖形界面工具馒过,例如sourcetree的話,或者對git 的命令熟悉的話酗钞,按照原理基本可以到此為止了腹忽。
但是如果你對命令不熟悉,那請看下面(在命令行工具中操作)
所有操作請注意當(dāng)前屬于哪個分支:git branch -a 查看服務(wù)器分支砚作。git branch 查看本地分支窘奏,當(dāng)前所在分支會在分支前帶有*號標(biāo)記或者明顯的顏色標(biāo)記
git checkout bug1.7.0 則切換當(dāng)前分支到bug1.7.0.
1.找到最后一次提交到master分支的版本號,即【merge前的版本號】例如
2.回退到某個版本號(假如B為服務(wù)器合并前代碼葫录,A為本地合并前代碼)
git reset--hard B
這個時候已經(jīng)回退到了上一次提交的版本着裹,但是之后的修改還是存在此時的develop分支上,以下步驟很關(guān)鍵
3.重新創(chuàng)建一個newB分支,這時候的分支就是上一次提交的B的代碼
git checkout-b newB ?
4.推到對應(yīng)的遠(yuǎn)程newB上
git push
5.重復(fù) 2-4步驟回退到A 并且創(chuàng)建分支newA并提交
git reset--hard A
git checkout-b newA
git push
6.這個時候相當(dāng)于備份了A和B米同,接下來就可以刪除本地及遠(yuǎn)端的分支
git branch-d develop
git push--delete origin develop
7.從newB分支骇扇,重新在創(chuàng)建develop分支,并推向遠(yuǎn)端
git checkout-b develop
git push
8.重復(fù)6的操作刪除 newB分支面粮,然后develop分支就恢復(fù)到合并前的狀態(tài)了少孝,分支名不變。
然后將newA重新合并到develop就好了熬苍。