$ hg update [-r REV]
Run Code Online (Sandbox Code Playgroud)
这会将工作目录切换到指定的版本.但是,如果我的工作目录已修改更改,则会将更改合并回来REV.我意识到我可以使用该-C标志来丢弃我的更改,但我试图update在不同的场景中关注命令的行为.
$ hg update <bname>
Run Code Online (Sandbox Code Playgroud)
这会将我的工作目录切换为<bname>分支.但是,在我明确使用该命令之前,我的未提交的更改不会合并merge.
$ hg pull
$ hg update
Run Code Online (Sandbox Code Playgroud)
这会在最近一次之后再次将我的工作目录与远程存储库中的更改集合并pull.
Mercurial 1.9.1
它与变更集之间的关系有关.如果工作目录的父变更集与要更新的目标变更集之间存在直接路径,Mercurial将尝试使用合并操作传输工作目录中的更改.因此,如果您所使用的变更集是要更新的变更集的直接后代或直接祖先,它通常会起作用.
在下图中,字母表示分支名称,数字是顺序修订号.wd是工作目录.
在同一分支上更新:
--A1----A3----A5---wd
\ /
A2------A4
Run Code Online (Sandbox Code Playgroud)
以上,基于A5进行了更改.如果您更新到A4,Mercurial将合并未提交的更改以传输它们.
--A1----A3----A5---A6---wd
\ /
A2------A4
Run Code Online (Sandbox Code Playgroud)
此外,如果有其他更改集(例如A6),这仍然有效,因为A4
更新到不同的分支(这次,更新到B4):
--A1----A3----A5---wd
\ /
B2------B4
Run Code Online (Sandbox Code Playgroud)
以上,修订2和4是在不同的分支乙,最近已经重新合并到分支一个.Mercurial还将转移未提交的更改,因为A5和B4是如此密切相关.并且:
--A1----A3----A5---A6---wd
\ /
B2------B4
Run Code Online (Sandbox Code Playgroud)同样,当您从远程仓库中提取新更改时,通常它们将是作为工作目录的父级的变更集的后代,因此它提供了直接关系,使得可以合并未提交的更改:
--A1----A3----A5---A6---wd
\ / \
A2------A4 A7---A8---A9 (A7 through A9 pulled)
Run Code Online (Sandbox Code Playgroud)在同一分支上更新:
--A1----A3----A5
\ /
A2------A4---A6---wd
Run Code Online (Sandbox Code Playgroud)
以上,基于A6进行了更改.如果您更新到A5,Mercurial将拒绝,说"未完成的未提交更改"或"跨越分支".这是因为您尝试将未提交的更改从一个头部合并到另一个头部,并且(根据定义)它们不是彼此的祖先或后代.当然,命名分支也是如此:
--A1----A3----A5
\ /
B2------B4---B6---wd
Run Code Online (Sandbox Code Playgroud)当Mercurial不会自动尝试合并未提交的更改时,您可以通过几种不同的方式将更改移动到新父级:
| 归档时间: |
|
| 查看次数: |
1566 次 |
| 最近记录: |