【问题标题】:What is the mercurial equivalent to `git checkout -`?`git checkout -` 的等价物是什么?
【发布时间】:2021-08-26 20:50:59
【问题描述】:

git checkout - 等效的 mercurial 是什么?我想去我上次去的地方。

我尝试了hg checkout -,但这会产生解析错误。

【问题讨论】:

  • “我想去我上次去的地方”——你能详细说明一下吗?
  • 当然:git checkout - 做了什么。例如,在git checkout foo && git checkout bar && git checkout - 之后,一个以引用foo 结束。在hg update foo && hg update bar 之后,我可以输入什么返回foo 而无需直接提及foo(以保存按键和检查日志)?。
  • 希望我知道更多 git :( 所以在做了 git checkout foo && git checkout bar 之后会是什么状态?它基本上不会使工作文件夹看起来像在 @987654331 提交的任何内容@ ?
  • 我想我正在尝试了解底层工作流程和目标,以便我可以考虑 HG 等价物可能是什么。
  • @StayOnTarget 正确,git checkout 大致是 hg updategit checkout - 的用例是在不同的提交之间快速跳转。例如“在书签 foo 上工作,切换到书签栏以查看一些代码以供参考,轻松切换回我开始的地方”。以cd 为类推:如果目录太多:dir_foodir_bar,则可以使用cd dir_foo && cd dir_bar && cd - 并以dir_foo 结尾。 git checkout -cd - 类似,但用于分支而不是目录。

标签: mercurial


【解决方案1】:

没有。

Git 中的-@{-1} 的简写,它指的是HEADreflog。虽然 Git 的分支比其他任何东西都更像 Mercurial 的书签,但每次您切换 分支时,Git 都会在 reflog 中写入一个条目,说明 在切换之前,当前分支是 。随后的@{-<em>number</em>} 表示扫描此特定的引用日志以查找此类条目,计数直到您找到第一个此类条目,然后使用该分支名称作为此处的名称。为此,系统必须维护此checkout 操作日志,并在提供新名称时存储旧名称。我在这里掩盖了 Git 所谓的 分离 HEAD 模式:@{-<em>number</em>} 指的是名称 原始哈希 ID。 Mercurial 没有 Git 的“分离 HEAD”模式:你总是在某个分支上。 Mercurial 分支是真实的、坚固的东西,不像 Git 的分支会蒸发而留下提交:在 Git 中,提交同时在 许多分支上,这在 Mercurial 中是非常荒谬的,但在 Git 中足够明智,删除一个分支只会带走允许 Git 找到提交的众多名称中的 一个

由于 Mercurial 不保留每个 hg update 的日志,因此无法从日志中检索先前的更新参数。 [编辑:有实验期刊扩展;请参阅Max Heiber's comment。] 当然,您可以编写自己的运行hg update 的小包装器,如果更新成功,则会记录更新前正在使用的提交和/或分支。然后这个包装器可以实现“update back”操作。

旁注:hg topics 命令StayOnTarget mentioned in a commentevolve extension 的一部分。这使 Mercurial 能够做 Git 无法做的事情。这与使用 Git 分支完全不同。 Mercurial without evolution 已经可以做 Git 可以做的事情,而且更多(因为 Mercurial 分支是真实的)。然而,分支的持久性,虽然乍一看很有吸引力,但在我看来通常是负面的(我的意思是“你应该首先使用书签,也许只使用书签”)。但是进化扩展是 Mercurial 和 Git 都非常缺少的功能。它们在 Mercurial 中可用,但不是标准发行版的一部分,并且需要额外的用户知识(另请参阅 roadmap 及其链接)。

【讨论】:

  • 谢谢!一些小的更正:git checkout - 不会转到上一个分支,它会转到 HEAD 最后的任何位置 - 可以是任何 ref,包括不在任何分支上的提交。因此,关于 git 和 hg 之间分支哲学差异的段落可能不相关。而hg,至少是我通过自制软件得到的,确实有一些看起来很像reflog - hg journal(实验扩展):mercurial-scm.org/wiki/JournalExtension
  • @MaxHeiber:这就是为什么我说我在掩盖 detached-HEAD 的东西。由于 Mercurial 完全没有这个概念,所以这里没有必要讨论它,但我倾向于技术上正确,所以我以这种横向的方式介绍了它。 :-) 另外:虽然我不知道 Journal 扩展,这很方便。
猜你喜欢
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 2013-10-01
  • 2021-11-24
  • 2011-05-06
  • 2017-11-13
相关资源
最近更新 更多