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

306 天前
 andyJado

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

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

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

5246 次点击
所在节点    git
28 条回复
Aurora0
306 天前
JetBrains 家的软件有本地历史记录可以找回的
KevinLock
306 天前
git reflog 找一下看能恢复吗?
试着用 subtree 吧,submodule 坑太多了
wgbx
306 天前
git 只要 commit 就能找回来,有操作历史命令的,试试 git reflog
wgbx
306 天前
找到哈希 commit ,cherry-pick 啥的都可以弄回来
konakona
306 天前
因为你本地 submodule 是游离分支吧,所以会丢失,但凡在你丢失之前执行一次 git log 看下 commit id ,这样一来在你发生“丢失”的时候,可以用 git cherry-pick 旧回来。

还是学而不精啊…
qqjt
306 天前
本地 commit 的时候,不先 commit submodule 的吗
kneep
306 天前
git reflog
woodfizky
306 天前
本地 commit 过用 git 可以找回来。

本地没 commit 过但是用的 jetbrains 的 IDE 可以用 local history 找回来。这个也是我本地忘了 commit 拉代码导致丢代码才发现的,本来都万念俱灰了。
xfn
306 天前
可以看看 google 的 repo ,android 和 chromium 的源代码都是它管理的,每个项目都是由上百个的 git 仓库组成。我们自己的工程管理中也用得很顺
MajestySolor
306 天前
git 的 submodule 是巨坑,碰过一次就再也不想用了
SingeeKing
306 天前
应该有 reflog ,checkout 会一并改 submodule 指向的 commit ,但是 commit 过不太容易丢
Inf1nity
305 天前
git submodule 确实是有挺多坑的,部分操作行为和结果非常反直觉。
kennir
305 天前
submodule 问题太多了,我们用 git-repo 管理多仓库,配合 codeup 还不错
tolbkni
305 天前
直接在 submodule 里改东西?我一般是会把 submodule 里的 repo 单独放个文件夹,所有改动在单独的 repo 里做,然后 push 到服务器上,submodule 只从服务器上拉取
Maboroshii
305 天前
submodule 概念的确难理解,我觉得不如 gitignore 加同步脚本来维护。。
jinqzzz
305 天前
repo 确实是个不错的替代/解决方案
andyJado
305 天前
@konakona
@qqjt
@KevinLock
@wgbx
父 repo 的 reflog 只记录一个 hash ,撒毛利的.git 都没了我 gi 啥有用?
icegogh
305 天前
git sub 相关的 api 水有点深,建议一般不到精通 git 的程度 不要触及
retanoj
305 天前
我想复现一下 OP 的操作,但有点没看明白。

本地修改了 submodule 并 add && commit 了,在父 repo 的 status 里会显示一个修改。这时候父进行 checkout branch 这个修改会带过去的吧?为啥会丢呢?
lvjiaxuan818
305 天前
submodule 已经不用了,workspace 你值得拥有。

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

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

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

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

© 2021 V2EX