## 教程 - 合并有沖突的改變
在[合并](/wiki/ChineseTutorialMerge)中我們已經學會了如何處理簡單的[Merge](/wiki/Merge)。
[Mercurial](/wiki/Mercurial)當然也處理更加復雜的 [Merge](/wiki/Merge)。很平常的情況是兩個人同時更改同一個文件的同一段代碼,然后必須給出處理的方法。這稱之為沖突;處理這類沖突稱之為合并。
首先讓我們人為的創建一個沖突的實例。 正如我們前面所做的, 通過做一個`my-hello`的[Clone](/wiki/Clone)開始:
```
$ cd ..
$ hg clone my-hello my-hello-not-cvs
```
現在,加入一些新的輸出語句到hello.c:
```
$ cd my-hello-not-cvs
$ vi hello.c
```
改變 `main` 如下所示:
```
int main(int argc, char **argv)
{
printf("hello, world!\n");
printf("sure am glad I'm not using CVS!\n");
return 0;
}
```
然后 [Commit](/wiki/Commit) 這些改變:
```
$ hg commit -m 'Give thanks for dodging bullet'
```
正如[第一次改變](/wiki/ChineseTutorialFirstChange)那樣,我們在`my-hello-new-output`里建立了一個[變更集](/wiki/ChangeSet),`my-hello-new-output`包含了第二輸出行。如果這時我們使用[Pull](/wiki/Pull)指令時,會發生什么事情呢?
```
$ hg pull ../my-hello-new-output
pulling from ../my-hello-new-output
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg update' to get a working copy)
```
到目前為止,非常順利。 讓我們試試 [Update](/wiki/Update)。
```
$ hg update
this update spans a branch affecting the following files:
hello.c (resolve)
aborting update spanning branches!
(use 'hg merge' to merge across branches or 'hg update -C' to lose changes)
```
正如[合并](/wiki/ChineseTutorialMerge)那樣,我們不得不運行 `hg?merge`. 像往前一樣, 合并程序將被啟動。經常是不能自動合并,因為同樣源文件的相同的代碼在每個[ChangeSet](/wiki/ChangeSet)中被不同的方式更改(一個是我們提交的更改方式,一個是我們[Pull]來的)。
```
$ hg merge
```
這時,會發生什么決定于電腦中安裝了什么樣的程序。 如果我們有先見之明或者幸運的話, 并且安裝了圖形的合并程序,我們就能夠看到在兩個更改之間發生了什么沖突,并決定如何去做。
[Mercurial](/wiki/Mercurial) 使用了三路合并。 這就意味著有三個文件來做合并,分別是:
* 本地文件(當前倉庫)
* 其它文件(正在被合并的倉庫)
* 基文件 (在分支分開前的最后一個版本)
要了解更多的三路合并, 請參考[ThreeWayMerge](http://revctrl.org/ThreeWayMerge) on the [Revctrl wiki](http://revctrl.org/).
另外,如果我們沒有安裝圖形合并程序, 我們就會開啟文本編輯器來訪問需要合并的文件。用手工來做這些事情是**非常**容易出錯并且繁瑣的。 最好是退出編輯器并用`hg?rollback`指令來清除["Pull"]帶來的改變,然后安裝合并程序,再做一次。
(注意: Mercurial 0.9之前的版本,"hg merge" 必須使用 "hg update -m"代替,"hg rollback" 必須用 "hg undo" 代替。)
現在讓我們繼續并在[總結](/wiki/ChineseTutorialConclusion)中完成我們的教程。