来自带有Git的版本控制
Git不会维护所创建分支名称的任何形式的历史记录, 移动,操纵,合并或删除。删除分支名称后, 不见了。
分支名称是ref,因此reflog
不会保留所创建分支名称的历史记录,
移动,操纵,合并或删除了?
答案 0 :(得分:4)
HEAD
reflog可以包含不再存在的分支名称条目(尽管仅仅是文本,例如moving from asdf to master
)。
由于今天构建了Git,因此当删除 X 本身时,也会删除一些参考 X 的引用日志。重命名 X 后,引用日志以相同的方式重命名,而无需添加任何新条目。这是因为引用日志的名称是分支的名称,并且在分支的名称前面插入了logs/
:master
(refs/heads/master
)的引用日志被命名为logs/refs/heads/master
,而HEAD
的引用日志名为logs/HEAD
。
在针对某些将来的Git的建议更新中,存在一些未完全实现的代码,这些代码在删除引用本身后仍保留reflog。所以有一天,这可能会改变。
答案 1 :(得分:3)
如果创建,移动或修改了分支,则Git会在分支的reflog中维护条目;如果已签出,则在HEAD reflog中维护条目。但是,Git不会维护已删除分支的引用日志条目,并且不会更新合并到另一个分支的分支的引用日志,尽管它确实会更新合并发生的分支的引用日志。
定期刷新引用条目,因此记录不是永久的。
本质上,如果引用是在本地创建,移动或以某种方式修改的,则该引用的引用日志将包含该引用的记录,直到引用被删除或该条目被修剪为止。
答案 2 :(得分:1)
除了torek提到的限制外,reflog是本地数据结构。这意味着即使保留了已删除分支的 刷新日志,您仍然没有完整的分支创建,删除等日志。reflog仅会知道在您本地具有历史记录的分支克隆,并且只知道那些分支的本地历史。