如何使用TortoiseGit和SourceTree完成相同的TortoiseHg HgWorkbench更新

时间:2016-11-02 04:37:57

标签: git mercurial tortoisehg tortoisegit sourcetree

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

2 个答案:

答案 0 :(得分:1)

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

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

Switch/checkout image

与TortoiseHg类似,活动版本以粗体突出显示: Active revision

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

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

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

答案 1 :(得分:0)

现在我对Git分支有了更好的理解,当我提出这个问题时,我理解我的困惑。因此,我会像其他人一样分享它,例如来自Mercurial,并尝试第一次使用Git。

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

@Malice的答案之所以对我来说不清楚是因为我不明白为什么我需要创建一个tmp_branch因为我没有理解这一点而没有参考提交节点Git将无法访问或有效删除那些未引用的节点。来自Mercurial,这是一个外国概念。

已添加12-27-2016我现在也明白,未实现的节点实际上并未删除但仍在存储库中,可以通过提交ID和分支日志进行访问,但不像它们出现在图表上那样容易。