【发布时间】:2023-01-17 08:34:03
【问题描述】:
在合并期间,我同时使用了Delete source branch when merge request is accepted 和Squash commits when merge request is accepted 选项。
Gitlab 完美地完成了他的工作:它压缩对单个提交的提交并将其合并到目标分支。
但它也保留原始提交 - 您可以在合并请求页面的 Commits 选项卡中看到它们:
我希望能够签出这些提交。但是在新的克隆存储库中,git 无法通过哈希找到它们:
$ git checkout c8ad8edf
error: pathspec 'c8ad8edf' did not match any file(s) known to git
我认为发生这种情况是因为 git clone 仅获得可以从初始提交到达的提交。但是 GitLab 存储了这些信息——我可以在浏览器中查看任何提交的信息:
那么我该如何检查这些提交呢?
【问题讨论】:
-
“我认为发生这种情况是因为 git clone 只获得可以从初始提交到达的提交" -> 否。可达性以相反的方式工作:git 看到所有可从现有引用(标签、分支、引用日志、存储条目)访问的提交,通过祖先向后工作,直到初始提交(或初始提交,因为可以有超过一)
-
如果获取不到,可以尝试在git lab上创建一个分支,然后就可以找到了
-
您是否也获取了更改?
git fetch --all -
这是图形问题。只要有一些标记/分支或任何分支标记或指向的寒意,提交就会可见。如果你看到提交,那么必须有一些东西让它们在历史图中保持活跃。 git 的哲学也是不要删除任何东西。当提交无法访问且陈旧时,物理删除会不时发生。因此,在很长一段时间内,如果您能够找到“已删除”提交(例如使用
git reflog),您就可以检出它。