【问题标题】:How to do the equivalent of TortoiseHg HgWorkbench Update using TortoiseGit and SourceTree如何使用 TortoiseGit 和 SourceTree 进行相当于 TortoiseHg HgWorkbench 更新
【发布时间】:2016-11-02 04:37:56
【问题描述】:

在 Tortoise HgWorkbench 中,我可以右键单击一个保存集并选择更新...,这允许我强制我的工作区设置其内容以匹配该保存集。我必须选中复选框以“放弃本地更改”。我现在正在使用 TortoiseGit 以及 SourceTree 和 Git。对分支中的前一个节点进行更新的等效命令是什么?实际上,我想暂时将我的工作区恢复到以前的修订版,丢弃当前在其中的所有内容,但不会丢失我以前的任何提交,然后稍后将我的工作区返回到我最近的提交。

【问题讨论】:

标签: git mercurial tortoisehg tortoisegit sourcetree


【解决方案1】:

要恢复到以前的修订并放弃后续的本地更改,请打开日志,右键单击相应的修订并选择 Reset master to this

如果您想恢复到以前的修订版而不影响已提交的更改,请打开日志,右键单击相应的修订版并选择Switch/checkout to this

与 TortoiseHg 类似,活动修订版以粗体突出显示:

要再次回到最新版本的master,只需右键单击它并选择Switch/Checkout to "master"

创建的临时分支也可以通过右键单击其日志条目并选择Delete refs/head/tmp_branch来删除。

要打开日志,请右键单击包含存储库的文件夹(它将有一个名为 .git 的隐藏子文件夹)并选择 TortoiseGit -> Show loglog 是上下文相关的。如果您这样做,您将看到当前分支的完整修订历史记录。但是,也可以打开子文件夹或单个文件的日志以仅查看其修订历史记录。

【讨论】:

  • 如何获得图表中显示的图形显示?使用 TortiseHG,我右键单击存储库文件夹并选择 Hg Workbench,但我找不到 TortoiseGit 的等价物。在 SourceTree 中有一个右键单击选项“将当前分支重置到此提交”是否与 TortoiseGit 中的“切换/签出到此”相同?
  • 我已经用打开日志的注释更新了我的答案。对于您的第二个问题,我从未使用过 SourceTree,因此我无法就其选项可能会做什么提供建议。听起来它是一样的,所以你可以在测试存储库上尝试它,看看会发生什么。
  • 应该注意 SourceTree 选项“将当前分支重置到此提交”不做相当于 Hg 更新。它会执行 REVERT,因此如果您重置三个修订版,它会从本地存储库中删除前三个更改集。当我说我想恢复到以前的版本时,我的意思是只在工作区中。我不想破坏存储库中的任何东西。 SourceTree Git 中 TortoiseHg 更新的等效命令是 Checkout...
【解决方案2】:

现在对 Git 分支有了更好的理解,我理解了我问这个问题时的困惑。所以我将它分享给像我这样来自 Mercurial 并第一次尝试使用 Git 的人。

我不明白的基本问题是 Git 所谓的分支实际上只是对特定提交节点(更改集)的指针或引用。它不是(正如名称分支所暗示的)一组连接的提交或节点。我遇到的另一个基本困惑是,提交可能存在于 Git 中而没有分支(节点引用)。与 Mercurial 不同,在 Git 中,如果您将当前分支指针移回前一个节点,并且没有其他分支指针引用任何后代节点,那么这些节点将不再可访问并且实际上丢失了。当我在 Mercurial 中进行提交时,常见用例的提交树是静态的。也就是说,如果我使用先前提交的节点 3 重新加载我的工作区,那么这三个后续节点不仅仍然可以访问,而且它们在图树上也是可见的。但是对于 Git,必须有一个指向节点或其后代之一的指针才能显示在图表上。这意味着当我将当前分支指针移动到其他地方时,我会丢失所有最近提交的后代。这根本不是我想要的。我只是想暂时重新加载我当前的工作区和以前的提交以进行测试,我不想更改或丢失任何以前的提交。那么我如何用 Git 做到这一点呢?最简单的方法是首先在我的工作区中提交任何未完成的更改,然后将祖先节点签出到一个新的分支名称,如 RegressTest。 (就像@Malice 提到的)然后我可以使用 RegressTest 加载整个树中的任何提交以进行测试。然后当我完成后,我可以删除 RegressTest 分支指针,然后再次检查我当前的分支。删除 RegressTest 不会丢失任何提交,因为它们已经被一个或多个其他分支指针引用。

@Malice 的答案对我来说不清楚的原因是我不明白为什么我需要创建一个 tmp_branch 因为我不明白如果没有对提交节点的引用 Git 将无法访问,或者有效地删除那些未引用的节点。来自 Mercurial,这是一个陌生的概念。

添加于 2016 年 12 月 27 日我现在还了解到,未引用的节点实际上并未被删除,但仍在存储库中,可以通过提交 ID 和分支日志访问,但不像它们出现在图表上那样容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 2011-10-17
    • 2011-08-13
    • 1970-01-01
    相关资源
    最近更新 更多