我有一个图形日志,如下所示:
(snip)
| |
| o 1) Other Dev: Commit
| | \
o | | 2) Me: Commit
/ | | |
| | o | 3) Other Dev: Commits with an error
| |/| |
| o |/ 4) Me: Merge and commit
| /|
|/ |
o | 5) Me: Realize there were bugs in the commit and take earlier version to merge with
| o 6) Other Dev: Fixes error
o / 7) Me: committing some changes
|/
o 8) Me: Merge fixed tip
在(8),除了(4)处悬空的额外头部之外,一切都应该如此。为了摆脱它,我必须合并(4)-.-> (8)但是,由于(4)中没有我需要的东西,我可以安全地丢弃所有这些变化。我可以手动逐个文件地进行合并(通常这不是什么大不了的事)但是对于我自己的启发 - 有一个简单的单行方式来说“merge(4)with(8)and always拿(8)“?
答案 0 :(得分:33)
是。 internal:local
内置合并工具。
$ hg merge 4 --tool internal:local
同样,internal:other
选择其他版本的文件作为合并版本。
这是一个澄清正在发生的事情的例子,从一个带有单个文件的回购开始:
$ echo a >> a
$ hg ci -Am.
adding a
$ echo a >> a
$ hg ci -Am.
将其分支并在a
:
$ hg up 0
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo b >> a
还在合并的分支中添加另一个文件:
$ echo b >> b
$ hg ci -Am.
adding b
created new head
返回并合并匿名负责人:
$ hg up 1
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg merge 2 --tool internal:local
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
当然,在没有合并工具的情况下,我们会在a
上发生冲突。但是使用合并工具,我们告诉Mercurial在与cset合并的每个文件上都采用第一个父版本的版本。
$ hg st
M a
M b
$ cat a
a
a
$ cat b
b