Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git是否将无法访问的对象推送到远程_Git - Fatal编程技术网

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)
  • 如果没有,如何使它也被推
  • 从评论中删除:

  • 不存在“不完全可达”的情况。它要么是可访问的,要么是不可访问的(从推送的refspec)。可到达的提交将被推送。遥不可及的不要。(对于普通的
    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
    会意外地删除只从添加的工作树中引用的对象!