git是否将无法访问的对象推送到远程
如果我使用git是否将无法访问的对象推送到远程,git,Git,如果我使用git commit--amend,那么上一次提交(比如commit A)会被覆盖,这并不是完全不可访问的,因为git reflog会记住它 我的问题是: 如果现在我执行一个git push,提交a会被推送到远程吗 如果是,那么完全不可访问的对象如何(例如,在git reflog expire--expire unreachable=now之后,使reflog忘记提交A) 如果没有,如何使它也被推 从评论中删除: 不存在“不完全可达”的情况。它要么是可访问的,要么是不可访问的(从推送的
git commit--amend
,那么上一次提交(比如commit A)会被覆盖,这并不是完全不可访问的,因为git reflog
会记住它
我的问题是:
git push
,提交a会被推送到远程吗git reflog expire--expire unreachable=now
之后,使reflog忘记提交A)git-push
,您可能正在使用默认配置选项push.default=upstream
,它推送当前分支;例如,如果您在master
,git-push
将推送master
,并且可以从master
访问的所有对象)相关术语是“悬挂对象”-无法从任何其他对象访问的对象git reflog expire
删除无法访问的对象。在那之后,那些回流不是遥不可及的,它们是不存在的分支
或标记
命令)。或者,使用git push
中的refspec
参数显式选择对象。(根据定义,每个对象都可以从自身到达。)问题1:没有。问题2:我希望我能理解这个问题。。。但我的直觉是否定的。我想我还是有点被“可达”搞糊涂了。提交“只能从reflog访问”不足以推送它;但它仍然被归类为“可达”。所以你的第3项是不够的。值得注意的是:你是对的,reachable被用作行话。但是,有两种方法可以使用它:对象X是可访问的(通常,从未指定的对象),或者对象X是可从引用Y访问的(更具体)。可以从reflog条目访问的对象也可以从该reflog条目访问。这将使对象在存储库中保持活动状态。但是,它不一定可以从引用中访问。当
git push
发送对象时,它会发送那些可以从您在git push
refspec中指定的提交或引用中访问的对象,减去服务器已经拥有的任何对象。同时,git reflog expire
expires reflog条目基于reflog条目年龄,加上另一个git词组容易混淆的标准:reflog条目根据定义是指对象。根据定义,reflog本身是某个命名引用的值日志。因此,我们可以问:对于reflog条目E,是否可以从引用的值访问E的值?如果答案为“是”,则到期时间基于到期时间,但如果答案为“否”,则到期时间基于到期不可到达时间。这是一个非常特殊的可达性问题:reflog对象可以从引用值到达吗?最后,还有git-gc
执行的垃圾收集。对于git gc
,关键问题是:这个对象(我是收集器,通过痛苦地枚举数据库中的每个对象找到的)是否可以从任何引用、任何reflog条目、任何索引条目、任何工作树中的任何头或git将来可能发明的任何其他鬼鬼祟祟的对象引用中访问?如果是这样,git gc
必须将对象留在数据库中。在Git 2.5到2.12中有一个bug,Git gc
会意外地删除只从添加的工作树中引用的对象!