djs*_*off 20 mercurial rollback
与Mercurial相关:在一个仓库中合并分支之间的一个文件,我正在尝试对单个文件执行回退操作,即使该文件是要退回的修订版中的许多参与者之一.
HG是面向变更集的工具,它不希望对文件进行操作.
我能找到的最近的是使用hg export创建diff,手工编辑diff,然后hg import以相反的顺序修补文件.
..但后来我遇到了这种烦人的情况,其中http://hgbook.red-bean.com/read/finding-and-fixing-mistakes.html声称有一个 - 反向选项,hg patch
当没有.
所以我能想到的最接近的事情是生成如上所述的手动编辑补丁,然后使用vanilla补丁-R来应用反向补丁.
这个hg backout
命令在这里似乎很有用,但实际上是一个红色的鲱鱼.
有GOT是更好的方式,不是吗?
Ry4*_*ase 23
您只需使用-I
(包含与给定模式匹配的名称)参数进行退出即可使用单行执行此操作:
hg backout --merge -I thefiletorevert -m 'message' OFFENDINGREVISIONID
Run Code Online (Sandbox Code Playgroud)
示例脚本:
hg init testrepo
cd testrepo
echo -e "line1\n\nline3" > file1
echo -e "line1\n\nline3" > file2
hg commit -A -m 'changes to two files'
perl -pi -e 's/line1/line 1/' file1
perl -pi -e 's/line1/line 1/' file2
hg commit -m 'put spaces in line1'
perl -pi -e 's/line3/line 3/' file1
perl -pi -e 's/line3/line 3/' file2
hg commit -m 'put spaces in line3'
hg backout --merge -I file1 -m 'remove spaces from line1' 1
Run Code Online (Sandbox Code Playgroud)
样本输出:
adding file1
adding file2
reverting file1
created new head
changeset 3:6d354f1ad4c5 backs out changeset 1:906bbeaca6a3
merging with changeset 3:6d354f1ad4c5
merging file1
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
Run Code Online (Sandbox Code Playgroud)
产生的文件内容:
file1:line1
file1:line 3
file2:line 1
file2:line 3
Run Code Online (Sandbox Code Playgroud)
请注意,在中间变更集退出后,file1在第一行中缺少它的空间,并且详细日志仅显示在退出中更改的一个文件:
$ hg log -v -r tip
changeset: 3:6d354f1ad4c5
tag: tip
parent: 1:906bbeaca6a3
user: Ry4an Brase <ry4an@mini>
date: Mon Sep 14 12:17:23 2009 -0500
files: file1
description:
remove spaces from line1
Run Code Online (Sandbox Code Playgroud)
这就是我要做的:使用最新修订的新克隆.
hg backout --merge -r revision_where_the_change_happened
Run Code Online (Sandbox Code Playgroud)
将反向更改合并到工作副本中.
现在将有问题的文件复制到您的常规工作副本并提交
hg commit -m "Reversed the changes to file.h made in revision bla"
Run Code Online (Sandbox Code Playgroud)
扔掉你上面创建的克隆.
这样,mercurial不知道revision_where_the_change_happened
和提交之间存在连接.如果你想要mercurial记住这个,而是做一个
hg revert {all files except the one in question}
Run Code Online (Sandbox Code Playgroud)
将退出提交合并到工作副本之后和提交之前.对于第二种方式,您不需要处理克隆,因为您希望保留退出提交.
我猜你选择使用哪种方式取决于特定文件更改的变更集的大小.
归档时间: |
|
查看次数: |
9175 次 |
最近记录: |