mercurial和git会在最近一次调用update/checkout
之前存储您所更改集的记录吗?这段历史存储在某个地方吗?
具体的用例是,如果您pull/fetch
项目的新工作,并遇到一些新的更改问题。这样的历史记录可以让您更新回原来的位置,以便在没有反复试验的情况下撤消更改。
答案 0 :(得分:3)
作为分发版,Mercurial不会存储您之前检查过哪些修订版的信息 - 但是Mercurial 3.9中有一个名为Journal的实验性扩展,如果启用,则会启用。另请注意,hg pull
不会更新为任何新引用,除非您告诉它,即它更像git fetch
而不是git pull
。 1功能
Git会将此信息存储在 reflog 中,以获取特殊引用名称HEAD
。 2 这取决于启用的reflog ;你可以禁用它们。正常工作存储库的默认设置是启用它们。
在git merge
或git rebase
(即git pull
的后半部分)后,HEAD@{1}
会提取reflog中的第一个条目。假设您成功进行了合并或变基(因此HEAD
的前一个值是旧的引用),那就是前一个HEAD
。如果您执行了rebase,并且失败并需要人工协助,则先前的HEAD
将进一步返回到reflog中,但ORIG_HEAD
将指向上一次提交。当前分支本身的reflog也很有用。
1 幸运的是,世界上很少有像git pull
这样的东西,因为git pull
是一个设计糟糕的便利工具,它通常比方便更不方便
2 HEAD
是否真的是一个参考名称是有争议的。对于reflog目的,它是。