【发布时间】:2021-05-05 08:43:48
【问题描述】:
如果不运行git prune 或git gc,git push 会上传任何未引用的对象吗?
想象一下这些提交历史:
A
在提交 C 中添加了一个新文件,并从提交 D 中删除了该文件。现在 git rebase --onto B D 将导致:
A
并且该文件仍在 .git/objects 中,因为它被两个分离的提交 C 和 D 引用。现在在这两个事件中会发生什么:
-
git push <remote> <branch>现在将远程包含已删除,因为文件对象仍然存在? -
将请求拉到远程分支的主要上游。如果 1 的答案是肯定的,如果 C 和 D 从未与上游合并,该文件是否会合并到上游?
编辑:这个问题补充了这里讨论的案例Removing unreferenced objects from remote
【问题讨论】:
-
“将 git push 上传任何未引用的对象”不。但是你的问题接着暗示 Git 处理文件。它没有。它处理提交。如果您的文件处于已推送的提交中,则您的 rebase 不会删除它。
-
当然,与我分叉的上游合并是否相同,因为分离的提交从未与我分叉的上游合并?
-
如果我正确理解您的评论:是的,它是一样的。不会传输未引用的对象。
标签: git git-rebase git-push git-gc