我正在使用Mercurial,本地出现了三个分支,导致当前状态非常混乱。我无法推送提交,并且只想删除所有本地更改和提交记录,然后使用完全干净的代码和清晰的历史记录重新开始。
换句话说,我希望最终(a)本地完全与远程分支的tip存在相同的代码,并且(b)没有任何本地提交的历史记录。
我知道hg update -C
会覆盖任何本地更改。但是如何删除任何本地提交?
明确一下,我不想保留我在本地完成的任何工作。我只想找到最简单的方式将其还原为完全干净的本地检查。
我正在使用Mercurial,本地出现了三个分支,导致当前状态非常混乱。我无法推送提交,并且只想删除所有本地更改和提交记录,然后使用完全干净的代码和清晰的历史记录重新开始。
换句话说,我希望最终(a)本地完全与远程分支的tip存在相同的代码,并且(b)没有任何本地提交的历史记录。
我知道hg update -C
会覆盖任何本地更改。但是如何删除任何本地提交?
明确一下,我不想保留我在本地完成的任何工作。我只想找到最简单的方式将其还原为完全干净的本地检查。
当最简单的方式(新的hg clone
)不切实际时,我使用hg strip
:
% hg outgoing -l 1
% hg strip $rev # replace $rev with the revision number from outgoing
重复执行直到hg outgoing
保持静默。请注意,hg strip $rev
会消除$rev
及其所有后代。
请注意,在您的Mercurial设置中可能需要先启用strip
。
注:更加智能的方法是使用revset语言进行操作:
% hg strip 'roots(outgoing())'
hg strip 'roots(outgoing())'
不被识别而无法正常使用该命令,可以尝试使用hg strip "roots(outgoing())"
。这样可以让命令正常运行。 - jseacmd.exe
中,是的,@SombreErmine。 - just somebodyhg log
或类似工具找出您未进行的最新修订(混乱开始之前的修订)。在这里使用hg outgoing
可以帮助您列出所有您所做的变更集,选择早于其中任何一个的修订号。good
,而您的克隆称为foo
,则执行以下操作:hg clone -r good foo foo-clean
hg id default
将告诉您远程存储库中最新版本的ID。hg pull -r
以获取最后一个“好”的修订版。 - Yitz好的。所以只需删除所有本地内容,hg init
新的本地存储库并 hg pull
最新的代码。记得在此之后执行 hg update
。
hg init
+ hg pull
= hg clone
,区别在于hg clone
会为您生成一个漂亮的.hg/hgrc
文件,并且在同一文件系统上克隆时,hg clone
将使用硬链接来节省空间。 - Martin Geislerhg help init
的输出在这里:http://www.selenic.com/mercurial/hg.1.html#init 但也许这太简略了?如果你需要更多帮助,请发送电子邮件到我们的邮件列表!请参见:http://mercurial.selenic.com/wiki/MailingLists - Martin Geisler您可以使用
hg strip revision
在本地存储库中删除任何修订版本及其子树。
https://www.mercurial-scm.org/wiki/Strip
但请勿尝试用于已经推送的内容。
只需删除本地系统上的所有内容,然后重新克隆远程存储库。
hg strip `hg out --template "{rev} {author}\n" | grep YOUR_AUTHOR_NAME | cut -d " " -f 1`这段代码可以帮助你删除所有未推送到默认存储库中的与你的作者名相同的修订版本。 如果你想检查另一个存储库而不是默认存储库,也可以使用这种方法:
hg strip `hg out OTHER_REPO_ALIAS --template "{rev} {author}\n" | grep YOUR_AUTHOR_NAME | cut -d " " -f 1`
如果你正在使用TortoiseHg,解决(小)问题的一种简单方法是首先更新到最新版本,然后选择您的变更集并启动“与本地合并”。当合并对话框出现时,只需单击小“+”图标以显示一些额外选项之一即可,“删除合并目标(其他)版本的变更集”。这样做意味着您的更改集仍将在存储库中并被推送,但不会产生影响,因为它们将在合并中被丢弃。如果您有许多跨越许多头部的更改集,则可能不希望以此方式污染存储库,但这是一个简单的修复方法,如果您正在丢弃的更改集包含稍后可能要引用的数据,则值得考虑。