reflog是否维护分支名称被创建,移动,操纵,合并或删除的历史记录?

时间:2019-01-24 00:17:23

标签: git

来自带有Git的版本控制

  

Git不会维护所创建分支名称的任何形式的历史记录,   移动,操纵,合并或删除。删除分支名称后,   不见了。

分支名称是ref,因此reflog不会保留所创建分支名称的历史记录, 移动,操纵,合并或删除了?

3 个答案:

答案 0 :(得分:4)

HEAD reflog可以包含不再存在的分支名称条目(尽管仅仅是文本,例如moving from asdf to master)。

由于今天构建了Git,因此当删除 X 本身时,也会删除一些参考 X 的引用日志。重命名 X 后,引用日志以相同的方式重命名,而无需添加任何新条目。这是因为引用日志的名称​​是分支的名称,并且在分支的名称前面插入了logs/masterrefs/heads/master)的引用日志被命名为logs/refs/heads/master,而HEAD的引用日志名为logs/HEAD

在针对某些将来的Git的建议更新中,存在一些未完全实现的代码,这些代码在删除引用本身后仍保留reflog。所以有一天,这可能会改变。

答案 1 :(得分:3)

如果创建,移动或修改了分支,则Git会在分支的reflog中维护条目;如果已签出,则在HEAD reflog中维护条目。但是,Git不会维护已删除分支的引用日志条目,并且不会更新合并到另一个分支的分支的引用日志,尽管它确实会更新合并发生的分支的引用日志。

定期刷新引用条目,因此记录不是永久的。

本质上,如果引用是在本地创建,移动或以某种方式修改的,则该引用的引用日志将包含该引用的记录,直到引用被删除或该条目被修剪为止。

答案 2 :(得分:1)

除了torek提到的限制外,reflog是本地数据结构。这意味着即使保留了已删除分支的 刷新日志,您仍然没有完整的分支创建,删除等日志。reflog仅会知道在您本地具有历史记录的分支克隆,并且只知道那些分支的本地历史。