首页 > 解决方案 > mercurial 和 git 是否存储您更新到的变更集的历史记录?

问题描述

mercurial 和 git 是否会记录您在最近调用之前所做的变更集update/checkout?该历史记录是否存储在某个地方?

一个具体的用例是,如果您pull/fetch在一个项目上进行新工作并遇到一些新更改的问题。这样的历史记录可以让您更新回原来的位置,以便在不反复试验的情况下逆转更改。

标签: gitmercurialrevision-history

解决方案


在分发时,Mercurial 不会存储有关您之前签出的修订版本的信息,但从 Mercurial 3.9 开始有一个名为Journal的实验性扩展,如果启用,它会存储。还要注意,hg pull除非您告诉它,否则它不会更新到任何新的引用,即,它git fetch比它更像git pull. 1

Git 确实将此信息存储在特殊参考名称的reflogHEAD中。2 这确实取决于启用的引用日志;你可以禁用它们。正常工作存储库的默认设置是启用它们。

git mergeor之后git rebase(即 的后半部分git pull),HEAD@{1}提取 reflog 中的第一个条目。假设您进行了成功的合并或变基(因此之前的值HEAD是旧引用),那么您将获得之前的HEAD. 如果你做了一个 rebase,它失败了并且需要人工帮助,那么前一个HEAD会在 reflog 中更远,但ORIG_HEAD会指向上一个提交。当前分支本身的 reflog 也将很有用。


1幸运git pull的是,世界上很少有东西像git pull

2是否HEAD真的是一个参考名称是有争议的。出于 reflog 的目的,它是。


推荐阅读