mercurial 和 git 是否存储您更新到哪些变更集的历史记录?
Do mercurial and git store history of which changesets you've updated to?
mercurial 和 git 是否存储了最近调用 update/checkout
之前您所在的变更集的记录?该历史记录是否存储在某处?
一个具体的用例是,如果您 pull/fetch
对项目进行了新的工作,并且 运行 遇到了一些新更改的问题。这样的历史记录可以让您更新回原来的位置,以便无需反复试验即可撤消更改。
作为分发版,Mercurial 不会存储有关您之前检出的修订版本的信息——但是从 Mercurial 3.9 开始有一个名为 Journal 的实验性扩展,如果启用,它会存储。还要注意 hg pull
不会更新到任何新的引用,除非你告诉它,也就是说,它更像 git fetch
而不是 git pull
.1
Git 确实存储此信息,在 reflog 中用于特殊引用名称 HEAD
.2这确实取决于 enabled 的 reflogs;你可以禁用它们。正常工作存储库的默认设置是启用它们。
在 git merge
或 git rebase
之后(即 git pull
的后半部分),HEAD@{1}
提取 reflog 中的第一个条目。假设您成功合并或变基(因此 HEAD
的前一个值是旧引用),这会让您获得前一个 HEAD
。如果你做了一个 rebase,它失败了并且需要人工帮助,之前的 HEAD
会在 reflog 中更靠后,但是 ORIG_HEAD
将指向之前的提交。当前分支本身的 reflog 也很有用。
1幸运的是,世界上很少有像git pull
这样的东西,因为git pull
是一个设计糟糕的便利工具,通常比它更不方便方便。
2HEAD
是否真的是一个参考名称是有争议的。出于重新记录的目的,它是。
mercurial 和 git 是否存储了最近调用 update/checkout
之前您所在的变更集的记录?该历史记录是否存储在某处?
一个具体的用例是,如果您 pull/fetch
对项目进行了新的工作,并且 运行 遇到了一些新更改的问题。这样的历史记录可以让您更新回原来的位置,以便无需反复试验即可撤消更改。
作为分发版,Mercurial 不会存储有关您之前检出的修订版本的信息——但是从 Mercurial 3.9 开始有一个名为 Journal 的实验性扩展,如果启用,它会存储。还要注意 hg pull
不会更新到任何新的引用,除非你告诉它,也就是说,它更像 git fetch
而不是 git pull
.1
Git 确实存储此信息,在 reflog 中用于特殊引用名称 HEAD
.2这确实取决于 enabled 的 reflogs;你可以禁用它们。正常工作存储库的默认设置是启用它们。
在 git merge
或 git rebase
之后(即 git pull
的后半部分),HEAD@{1}
提取 reflog 中的第一个条目。假设您成功合并或变基(因此 HEAD
的前一个值是旧引用),这会让您获得前一个 HEAD
。如果你做了一个 rebase,它失败了并且需要人工帮助,之前的 HEAD
会在 reflog 中更靠后,但是 ORIG_HEAD
将指向之前的提交。当前分支本身的 reflog 也很有用。
1幸运的是,世界上很少有像git pull
这样的东西,因为git pull
是一个设计糟糕的便利工具,通常比它更不方便方便。
2HEAD
是否真的是一个参考名称是有争议的。出于重新记录的目的,它是。