2

git reflog显示所有活动,甚至压缩提交等(如果我错了,请纠正我)。

是否有 git CLI 命令来备份 git reflog?

显然,如果我删除了本地版本的存储库,我的 reflog 就会丢失(如果我错了,请纠正我)。

我想知道我是否可以git push为了安全或类似的事情?

如果不是,我应该采取什么方法来防止 reflog 丢失?

更新:作为对 Jiri Kremser 的回应,如果我在恢复后.git/logs可以备份到 reflog 中的任何提交吗?git reset --hard

4

4 回答 4

4

是和不是。它没有命令,但您可以备份.git/logsreflog 的存储位置。

但是,那里只存储了对提交的引用,所以这就像备份符号链接(或 Windows 中的快捷方式)。它可能会起作用,具体取决于您想要做什么。

一般来说,公开 reflog 并不是一个好主意,因为它只适用于本地 repo。

于 2016-04-02T00:23:40.077 回答
1

您可以将 reflog 视为您对 Git 存储库所做的所有事情的审计跟踪。如果您需要返回并恢复通过某个过程丢失的某些内容,它会立即很有用,但从长远来看,备份它不会完成那么多。

要备份的更有价值的东西是实际的存储库。丢失对 Git 存储库的那些实际、具体的更改绝对会导致数据丢失,而丢失 reflog 通常意味着您无法查看命令列表并找出变基的开始位置。虽然当您拥有一个稳定的环境时这将非常有用,但如果您出于任何原因需要恢复它,您真的应该关心整个存储库。

于 2016-04-04T07:06:57.100 回答
1

由于 reflog 只是指向提交的指针,而不是实际的提交数据,只要你的提交足够老并且 git 运行git gc(在大多数情况下默默地运行),实际的提交仍然消失了。与其备份 reflog,您可能只想在代码中添加分支标签。这些不仅会保留历史记录,还会保留实际的提交。一旦你对你的 squash / rebase / 其他破坏性的东西感到满意,删除这些旧分支,git gc 会很高兴地再次收集旧数据。

于 2016-04-06T06:12:03.807 回答
0

git reflog显示所有活动(甚至压缩提交等)。(如果我错了请纠正我)

正如你所知道的,git reflog几乎将所有活动都存储在 git 中。
几乎任何事情都意味着它实际上并不存储所有活动,而是存储所有在本地修改过的活动。HEAD

重要的是只存储本地数据,因此备份和恢复它是无用的。

Why cant i backup reflog?

由于 reflog 仅存储本地存储库的相关信息,因此如果将其还原到不同的存储库中,它将不起作用。

例如考虑这个(非常简单的)本地流程:

# checkout master branch
git checkout master

# do some changes and commit 
- At this point there will be a new entry in the reflog

# now you decide to discard your changes
git reset HEAD~1 --hard
- At this point a new entry is added to your reflog
- The commit which you made is a dangling commit which can be 
  recovered on your local machine but does not exist on any other
  repository beside yours.

这是一个非常简单的流程,但是您可以从该流程中了解到,即使您可以备份 reflog(并且您可以简单地备份.git/logs),它也将毫无用处。

还有许多其他类似的情况会使您的 reflog 无用。

这就是为什么它在您的机器上而不是在任何其他机器上的原因。

假设现在你有我的 reflog 备份,如果我已经执行,它对你没用rebasefilter-branch等等。

在此处输入图像描述

于 2016-04-04T11:59:59.183 回答