gpt4 book ai didi

git - 回滚到 Mercurial 中的旧版本(如 git reset)

转载 作者:太空狗 更新时间:2023-10-29 12:56:32 24 4
gpt4 key购买 nike

使用 git,我可以使用如下命令丢弃错误或意外的提交

git reset --soft HEAD^

将当前分支(例如 master)重置为当前修订版的父提交 HEAD^ 而无需触及工作树——您可以替换 --soft --hard 如果你也想删除工作树。

此外,如果我想摆脱不止一个提交,我可以使用像这样的命令

git reset --hard 53b94d0

这让我回到提交 53b94d0 的时候,就好像在那之后我从未提交过任何东西一样。

什么是 Mercurial (hg) 等价物?

最佳答案

虽然 Mercurial 没有提供简单的替代方案并且回避了可变历史的想法,但有几种方法可以实现接近的目标。在这篇文章中,我将概述其中的一些。

Mercurial 回滚

如果你特别想撤销你的最后一次提交,你可以使用:

hg rollback

这将撤消提交(它不会触及工作树 - 你应该能够使用 hg revert --allhg update -C 如果您还想重置整个工作目录)。

hg克隆-r

假设您想将名为 giraffe 的存储库重置为修订版 77182fb7451f。如果您 cd 进入父目录并运行:

hg clone -r 77182fb7451f giraffe new-giraffe
cp giraffe/.hg/hgrc new-giraffe/.hg/

然后您将得到 new-giraffe,版本号为 77182fb7451f 的存储库。 (cp 是确保 new-giraffe paths(如 git 的“remotes”)正确指向原始仓库而不是 giraffe 所必需的> 默认情况下的文件夹。)

这比从 Internet 上重新克隆要快,因为它只将文件本地复制到您的磁盘上(在许多系统上,硬链接(hard link)它们以节省更多时间和空间),但如果您的存储库仍然非常耗时很大。

Mercurial 条

如果你想通过修改提交历史来做更复杂的事情(顺便说一下,这在 hg 世界中有点不受欢迎),首先启用 Mercurial Queues extension通过将以下行添加到您的 .hgrc(无需在等号后指定路径):

[extensions]                                                                    
mq =

这为您提供了(除其他有用的东西外)hg strip 命令以从存储库中完全删除变更集及其所有后代。因此,您可以使用如下命令:

hg strip 1cc72d33ea76

如果 1cc72d33ea76 是您要删除的存储库中的第一个“坏”变更集。

不幸的是,使用这种方法通常很难完全删除正确的变更集,而且很容易以多个头结束(您可以使用 hg heads 查看),需要繁琐的重复应用hg strip 在你到达你想去的地方之前没有多余的头。

hg 带使用 revsets

使用 hg revsets您可以删除 .(当前修订版)的所有祖先,它们不是您要恢复到的修订版的祖先,使用如下命令:

hg strip "ancestors(.) and not ancestors(77182fb7451f)"

确保首先运行:

hg log -r "ancestors(.) and not ancestors(77182fb7451f)"

这将向您显示 hg strip 将删除的所有变更集,因此您可以确保您不会无可挽回地损害您的提交历史(因为您有备份……对吗?)。

关于git - 回滚到 Mercurial 中的旧版本(如 git reset),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11322532/

24 4 0