我有一个提交,我将文件移动到另一个文件夹,然后对这些文件进行更改。
我想把这个版本分成两个部分:
- 只有文件移动
- 对这些移动文件的其余修改。
如何使用Mercurial/hg完成此操作?
我知道我可以将当前文件移动到另一个文件夹(例如folder -> backup_folder
),然后从零开始,做实际的移动,然后hg commit
它,最后重命名backup_folder -> folder
并在上面提交一个新的修订。但是,我宁愿有一个hg
命令,它可以根据从/rename到"hg log -vpr REV
显示的行
假设现有的提交还没有被推送到其他地方。如果是这样,那么这将无法正常工作,因为您无法修改公开的历史记录。
假设你的历史记录是这样的:
A-B-*
其中B
有移动&*
为当前工作目录
假设B
包含从a/b/c/file1
复制到d/e/f/file2
的结果。
将B
追溯拆分为两部分:
方法1:"Mercurial(命令行)
hg up A
hg revert -r B
(此时工作目录将包含两个文件移动&文件更改)
每次移动&修改文件:
hg cat --output=a/b/c/file1 --rev=B d/e/f/file2
(现在每个移动的文件都有它原来的内容,但是在新的位置。)
hg commit ...
(创建B'
)hg revert -r B
(恢复文件内容)
hg commit ...
(创建C
)那么现在你的历史记录看起来像:
A-B
B'-C-*
hg strip B
(如果您也使用
histedit
,也可以使用hg prune
)离开:
A-B'-C-*
在#5,你可能也可以rebase
,这应该产生相同的结果,也处理原来的提交B
,其他
方法2:Windows上的TortoiseHG(主要是GUI)
我使用TortoiseHG和WinMerge作为可视化diff工具。考虑到这种设置,我认为这样做会更快:
在THG中,右键单击
A
,选择"更新">右键单击
B
,选择"还原所有文件">打开每个移动&在visual Diff (
^D
)中修改文件- 在diff工具中恢复所有更改,保存文件
Commit…
右键单击
B
,选择"还原所有文件">Commit…
右键单击
B
,修改历史记录,条带
假设THG与其他diff工具,或不在Windows上,将类似地工作。
关于使用日志的问题…如果您像这样查看日志:
hg log --git -vpr revision#
它将包含以下行:
copy from a/b/c/file1
copy to d/e/f/file2
我知道没有简单/直接的方法让hg读取这些行并使用它们来重新应用命令。虽然这将枚举所有复制的文件,但使用任何其他方法查看commitB
也可以做到这一点。所以我不认为使用日志能让你走得太远,不幸的是。