“.git/log”的目的是什么?

8
我注意到在寻找git保存stash提交的地方时出现了.git/log。我发现:
$ ls .git/logs/
HEAD  refs 
$ diff .git/refs/ .git/logs/refs/ | head -n3
Common subdirectories: .git/refs/heads and .git/logs/refs/heads 
Common subdirectories: .git/refs/remotes and .git/logs/refs/remotes 
diff .git/refs/stash .git/logs/refs/stash 

意义: stash - 是在logs下唯一的独特文件。但它并没有阐明这个文件夹的目的。那么,.git/log的目的是什么,为什么Git会复制引用?

3个回答

3

logs目录是Git存储reflogs的位置。Reflogs指示了您的引用在某个早期时间点时所指向的内容。即使进行了git commit --amendgit rebase等操作,Reflogs仍会存储原始提交记录。即使git pull拉取了数十个提交,Reflogs仍会存储单个提交记录。Reflogs使撤消某些操作变得容易。

对于您拥有的所有引用以及最近过去的所有引用,存在Reflogs是正常的。通过使用git stash命令,您曾经有一个stash引用。即使现在您不再拥有该引用,Reflog也会记住它。这也可以让您撤消意外删除分支等操作。


2
他们是“reflogs”,记录了您存储库中各种引用过去指向的历史记录。
请参阅git help refloggit help log 中关于-g,--walk-reflogs的文档。
如果您运行了diff -r,则会看到更多差异,因为refs / 文件都包含单个提交,而logs / refs包含历史记录文件。
请注意,通常不建议查看refs / 目录以查找存储库中的引用。除了是“松散的”之外,引用还可能仅存在于packed-refs中,并且没有相应的条目在refs / 目录中。

1

日志 此目录存储对引用所做更改的记录。有关更多信息,请参见git-update-ref1。如果设置了$GIT_COMMON_DIR,则会忽略此目录,并使用“$GIT_COMMON_DIR/logs”代替。

参考:gitrepository-layout


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接