你可以备份git reflog吗?有关防止代码丢失的最佳做法的建议

时间:2016-04-02 00:16:30

标签: git git-reflog

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

是否有用于备份git reflog的git CLI命令?

显然,如果我删除了本地版本的repo,我丢失了我的reflog(如果我错了,请更正我)。

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

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

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

4 个答案:

答案 0 :(得分:4)

是和否。没有命令,但您可以备份存储reflog的.git/logs

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

一般情况下,将reflog公开为止并不是一个好主意,因为它只适用于本地回购。

答案 1 :(得分:1)

您可以将reflog类型视为您使用Git存储库完成的所有事情的审计跟踪。如果您需要返回并恢复通过某个过程丢失的内容,它会立即生效,但从长远来看,备份它将无法实现这一切。

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

答案 2 :(得分:1)

由于reflog只是提交的指针,而不是实际的提交数据,只要你的提交足够老并且git运行git gc(在大多数事情的掩护下默默运行),实际的提交仍然是不见了。您可能希望只使用分支标签丢弃代码,而不是备份reflog。这些不仅会保留历史,还会保留实际的提交。一旦你对你的壁球/篮板/其他破坏性的东西感到满意,删除这些旧的分支,git gc将很乐意再次收集旧的数据。

答案 3 :(得分: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等,它对你没用。

enter image description here