git reflog
显示所有活动,甚至是压缩提交等。(如果我错了,请纠正我)。
是否有用于备份git reflog的git CLI命令?
显然,如果我删除了本地版本的repo,我丢失了我的reflog(如果我错了,请更正我)。
我想知道我是否可以git push
为了安全或其他类似事情?
如果不是我应该采取什么方法来防止丢失reflog?
更新:为了回应Jiri Kremser,如果我恢复它后,我可以.git/logs
备份git reset --hard
到reflog中的任何提交吗?
答案 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,如果我执行了rebase
,filter-branch
等,它对你没用。