**Scenario:**
當自己修改完代碼,準備commit之前做了一次pull+update,做了些解決沖突工作,然后驗證代碼是否正常工作。
確認一切正常后,執行hg commit,然后執行hg push。但是網絡出現問題,push失敗。等到網絡恢復正常后,發現自己的版本已經不是最新版了,
push繼續失敗。提示:
abort: push creates new remote head 8f1da767f592!
hint: you should pull and merge or use push -f to force
**Merge:**
按照提示所述,我們需要更新代碼并做一次merge操作才可以正常提交自己的代碼。
執行hg pull后,hg很人性的提示我們:
(run 'hg heads' to see heads, 'hg merge' to merge)
當我直接執行hg merge時,hg再次提示我:
abort: outstanding uncommitted changes (use 'hg status' to list changes)
看來哪里還是有問題,好吧,先來看看merge的幫助吧。
~~~
$?hg?merge?--help??
hg?merge?[-P]?[-f]?[[-r]?REV]??
??
merge?working?directory?with?another?revision??
??
????The?current?working?directory?is?updated?with?all?changes?made?in?the???
????requested?revision?since?the?last?common?predecessor?revision.??
??
????Files?that?changed?between?either?parent?are?marked?as?changed?for?the???
????next?commit?and?a?commit?must?be?performed?before?any?further?updates?to??
????the?repository?are?allowed.?The?next?commit?will?have?two?parents.??
??
????"--tool"?can?be?used?to?specify?the?merge?tool?used?for?file?merges.?It??
????overrides?the?HGMERGE?environment?variable?and?your?configuration?files.??
????See?"hg?help?merge-tools"?for?options.??
??
????If?no?revision?is?specified,?the?working?directory's?parent?is?a?head??
????revision,?and?the?current?branch?contains?exactly?one?other?head,?the???
????other?head?is?merged?with?by?default.?Otherwise,?an?explicit?revision?with??
????which?to?merge?with?must?be?provided.??
??
????"hg?resolve"?must?be?used?to?resolve?unresolved?files.??
??
????To?undo?an?uncommitted?merge,?use?"hg?update?--clean?."?which?will?check??
????out?a?clean?copy?of?the?original?merge?parent,?losing?all?changes.??
??
????Returns?0?on?success,?1?if?there?are?unresolved?files.??
??
options:??
??
?-f?--force??????force?a?merge?with?outstanding?changes??
?-r?--rev?REV????revision?to?merge??
?-P?--preview????review?revisions?to?merge?(no?merge?is?performed)??
?-t?--tool?VALUE?specify?merge?tool??
??
use?"hg?-v?help?merge"?to?show?more?info??
~~~
嘗試一下hg update --clean,看起來不錯。
~~~
$?hg?update?--clean??
8?files?updated,?0?files?merged,?1?files?removed,?0?files?unresolved??
~~~
再次執行merge。
~~~
$?hg?merge??
2?files?updated,?0?files?merged,?0?files?removed,?0?files?unresolved??
(branch?merge,?don't?forget?to?commit)??
~~~
看起來成功了,按照提示,再commit一下。此時我們的提交信息只要告知一下這是一次merge操作即可。
然后push,成功。結果是原來的commit還是那時的changeset,最新的commit就是你剛剛提交的,信息為merge的那一條。
至此merge成功!