git,我爱你👩, submodule 全是 bug,这回丢大了。

337 天前
 andyJado

背景:原始库作为 submodule 在父 repo 下面。

行为:本地 commit 了没有 push ,父 repo cehck 一下别的 branch ,check 回来。

结果:submodule 所在文件空了,丢失了 commit 但没 push 的历史。

5288 次点击
所在节点    git
28 条回复
lisxour
336 天前
给我的感觉是误操作导致的
HangoX
336 天前
subTree 好用点,对于本地来说没有任何感知
andyJado
336 天前
你 check 了一个新的 branch ,我 check 的是老 branch ,该 bc 我切出来的时候还没有 add submodule 。

我看你回复后又去复现了一下,会丢。
cloudzhou
336 天前
@andyJado 复现你的操作,不管怎么切换 submodule 都保持了当时的一个 commit ,除非 reset hard ,不知道你怎么丢失的
andyJado
336 天前
@cloudzhou

我又重建新两个 repo ,复现成功。

关键:branch0 没有 submodule ,切 branch1 add & commit submodule ,回到 branch0 ,没有撒毛利。再回到 branch1 ,本地的 sumoli 空了,.git 都没有。
konakona
336 天前
要不试试 `git fsck --lost-found`,这将列出孤立的 commit 和其他对象。

在 `.git/lost-found/commit/` 目录下你可能会找到你丢失的 commit 对象。

以上来自 chatGPT 。
owt5008137
336 天前
子 repo 的 reflog 里有。默认设置映像中 3 天内都是不会 gc 掉的
exch4nge
336 天前
@andyJado #25 好奇试了下,切换到没有 submodule 的分支时,会提示 warning: unable to rmdir 'a': Directory not empty ,分支切换成功但是 submodule 对应目录还在

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1009115

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX