有一个场景,我们非故意将命名branch(ABC
)合并到我们的default
分支中.
hg rollback
不是一个选项,因为自那以后有一些提交.
有没有办法撤消这个?
你将需要Mq扩展.如果您没有打开它,请将其添加到您的Mercurial.ini
或.hgrc
文件中.
[extensions]
hgext.mq=
Run Code Online (Sandbox Code Playgroud)
如果你不熟悉它,Mq扩展让你操纵历史.好消息是,这将允许我们修复你的回购.坏消息是任何克隆混乱仓库的人都必须再次克隆它,因为我们将改变历史.
首先,再使用你的仓库的另一个克隆来工作,所以我们不会搞砸任何东西.
现在,找到合并变更集的修订版ID(已合并default
和您的命名分支).写下来.我们将其称为changesetM
.现在找到下一个变更集的修订版ID.写下来.我们将其称为changesetN
.
获得这两个修订版ID后,请转到命令提示符并cd
进入您的仓库.然后键入以下内容,替换changeset[M|N]
为相应的修订版ID:
$ hg qimport -r changesetN:tip
# This will add all of your changes since the merge to the queue
$ hg qpop -a
# This pops them all out of your history.
$ hg strip changesetM
# This removes the merge changeset.
$ hg update -C default
# Make sure we're on the default branch
$ hg qpush -a
# Take the changesets in the queue and push them back onto your history.
$ hg qfinish -a
# Remove changesets from the queue and finalize them as normal changesets.
Run Code Online (Sandbox Code Playgroud)
实质上,您在默认分支之上重新定义新的变更集,删除流程中的合并变更集.完成后,您需要将更改推送到服务器上的新存储库,并让同事克隆新的副本.
最后,如果您有任何其他Mercurial问题,请查看kiln.stackexchange.com.
UPDATE
我忘了提一下:如果有人对仅在另一个分支中的某些内容进行了更改,则可能hg qpush -a
会失败.你会看到一个文件foo.txt.rej
和foo.txt.orig
文件.不幸的是,你必须自己解决这个问题.要解决此问题,请打开原始文件,.orig
文件和.rej
文件,然后选择要合并的正确更改,并将其保存在原始文件中.将其合并后,用于hg qrefresh
将该补丁更新到新的合并补丁.从他们的,你应该能够hg qpush -a
再次运行并继续.如果您在另一个补丁上再次遇到相同的错误,请按照相同的过程进行操作.
如果您尚未公开发布存储库,您可以执行此操作
hg clone -r (parent1 of bad merge) -r (parent2 of bad merge) old new
Run Code Online (Sandbox Code Playgroud)
并删除旧的存储库。
归档时间: |
|
查看次数: |
19848 次 |
最近记录: |