我创建了一个新的存储库,test-backout并在其中添加了一个新文件file.然后我每次做4次提交,附加file使用的提交次数
echo [manually entered number] >> file
hg commit -m '[manually entered number]'
Run Code Online (Sandbox Code Playgroud)
实际上,文件有:
init
1
2
3
Run Code Online (Sandbox Code Playgroud)
根据hg书,如果我跑hg backout --merge 2,我应该:
init
1
3
Run Code Online (Sandbox Code Playgroud)
但相反,它无法合并并打开我的difftool(vimdiff),我得到3个选项:
init | init | init
1 | 1 |
2 | |
3 | |
Run Code Online (Sandbox Code Playgroud)
我最初尝试使用该--merge选项,然后再没有它.我现在的问题是,还有办法让我得到:
init
1
3
Run Code Online (Sandbox Code Playgroud)
我只是犯了错误或错过了什么,还是我坚持这些选择?
你获得3向合并的一个重要因素是你的上下文过于人为,我会谈到这一点.
如果我采用50行文本文件并更改不同的部分并提交每个更改,我将不必解决冲突.我的意思是我有4个变更集:rev 0添加文件,revs 1,2和3每个更改文件的一个区域:开始,中间或结束.
在这种情况下,当我这样做时hg backout 2,它会反转rev 2并将这些更改合并到我的工作目录中,当我提交时,图形是线性的:
@ backout 2
|
o 3
|
o 2
|
o 1
|
o initial
Run Code Online (Sandbox Code Playgroud)
如果我这样做hg backout 2 --merge,它会自动提交退出作为它正在退出的修订版的子代,然后将其与提示合并,在我提交合并后生成分支图:
@ merge
|\
| o backout 2
| |
o | 3
|/
o 2
|
o 1
|
o initial
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我都不需要进行任何三向合并.你没有自动获得的原因
init
1
3
Run Code Online (Sandbox Code Playgroud)
而必须做三向合并是因为变化太接近了.每个变更集中的上下文和更改完全重叠(diff块的默认上下文行数为3行,其中包含仍在第4个变更集中的整个文件).
一个类似的例子是,如果你有3个变更集,每个变更集都修改了同一行.如果您退出中间更改,就像您在这里做的那样,您仍然会看到一个3向合并,您可能需要手动编辑以获得正确的.
顺便说一下,1.7的行为确实发生了变化,如下所示hg help backout:
在1.7版之前,没有--merge的行为等同于指定--merge后跟"hg update --clean".取消合并并将REV的子女留作单独合并的负责人.
但是,我认为这不是你所怀疑的.
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |