我的大部分源代码控制经验都是Subversion和那里(除非你使用管理模式删除功能,你通常不这样做)所有对存储库的提交都会在存储库的生命周期内保留。
我不确定Github也是如此。例如,this post talks about some reflog thing和某些 prune 可能会以不可撤销的方式删除某些数据。
假设没有删除提交被推送的repo,我可以确定提交永远不会以不可撤销的方式丢失吗?
答案 0 :(得分:1)
提交完成后,一旦你将提交推送到GitHub仓库,它就会有一个sha1。
并且该GitHub仓库的任何克隆都能够找到相同的SHA1 确定此提交仍然存在。
在Git Basics中:
Git中的所有内容在存储之前都会进行检查求和,然后由该校验和引用。这意味着如果没有Git知道它,就不可能改变任何文件或目录的内容。这个功能在最低级别内置于Git中,并且是其理念的组成部分。如果Git无法检测到信息,您就不会丢失传输中的信息或导致文件损坏。
Git用于此校验和的机制称为SHA-1哈希 这是一个40个字符的字符串,由十六进制字符(
0–9
和a–f
组成),并根据Git中文件或目录结构的内容计算。
SHA-1哈希看起来像这样:
24b9da6552252987aa493b52f8696cd6d3b00373
实际上,提交的SHA1也基于所述提交的父级:您不能在不影响所有后续提交的情况下更改过去的历史记录。
reflog
覆盖 GitHub上的历史记录,则只会出现git push --force。 在这种情况下,GitHub支持可以访问GitHub仓库的本地reflog,并且可以恢复任何分支或标记不再引用的提交(因此它存在于reflog中)。
更新:或 repo所有者可以查询GitHub事件API :
请参阅“Does GitHub remember commit IDs?”