git 重置到其他远程分支的代码后还能恢复吗?重置后,没看到历史,内心是崩溃的。

2016-12-22 16:50:32 +08:00
 bbbb

情况是这样的,在一个 git 仓库添加了两个远程仓库地址 A 和 B ,今天重置的时候不小心将 A 的历史重置到 B 仓库去了,导致 B 仓库 15 号以后提交的历史都没了,而 A 又是远程仓库,一直在更新, B 是在 A 上的分支, A 并没有 pull 到本地,提交的历史其实只存在远程分支上。

平时都有随时 push 的习惯,这段时间不知道怎么回事,没有 push ,远程仓库也是只有 15 号及以前的代码。在提交历史里面没有任何记录。

这次重置保留到了最后一次 Push 到 B 上面的历史,疑似跟远程分支有关,这次重置是否改写了 git 的提交记录?

问题到不严重,这几天时间都花在找问题,梳理逻辑上了,花点时间代码就回来了。

想了解下,这样的情况下,还能找回之前的代码了吗?当看到没有历史记录的时候,我其实基本是放弃了的,当时傻逼的把工程关了,不然可能还能在工程里把代码找回些。

看到没有历史记录的瞬间,内心不知道怎么形容。。。

4667 次点击
所在节点    git
25 条回复
skydiver
2016-12-22 16:55:11 +08:00
git reflog 找到之前的那个提交的 sha1 ,然后 co 过去就行了
dong3580
2016-12-22 16:58:03 +08:00
前天遇到.
git log 看不到, 欲哭无泪,最后发现线上分支可以看到 log,然后切到线上写的变动的那个 sha1 上,拿到代码后对比线下重新覆盖上了.
besto
2016-12-22 17:03:30 +08:00
前提是没有做 git gc ,而没 gc 就太简单了。
1L 的做法就可以,你可以选择用 git fsck --lost-found 找到最后一个提交的 commit id 就可以。
bbbb
2016-12-22 17:12:42 +08:00
@skydiver
@besto 好,我试试。谢谢了。看到了历史记录了。
bbbb
2016-12-22 17:13:17 +08:00
@dong3580 我没有提交到线上,以后还是的提交了
bbbb
2016-12-22 17:18:24 +08:00
@skydiver
@dong3580
@besto 谢谢了,找回来了,我还以为看不到历史就找不回来了。一会还得多学习。
wwulfric
2016-12-22 17:50:20 +08:00
这种问题 3 条路:
wwulfric
2016-12-22 17:51:36 +08:00
1. git reflog (基本上这个就可以了,不小心强推分支也可以靠它恢复)
2. 没有提交远程的话,从远程重新 fetch
3. 提交远程的话,从别的同事那里恢复
bbbb
2016-12-22 18:48:49 +08:00
@wwulfric 嗯,思路学习了。
以后就得多提交,提交了就有救。
git 现在没有研究得太多,出现问题后,第一时间保留好分支,上网查了下,关键字没弄对。没查到,恢复后,又重新查了下 git 恢复分支就找到了。
其实出现问题后,虽然不是什么大问题,但是说不出的感觉。。。
Rice
2016-12-22 19:00:18 +08:00
当初第一次用 git 的时候,我就模拟了开发时可能遇到的情况各种瞎整。最后我发现 git reflog 这个命令绝大多数情况可以恢复历史。
然后没提交的代码整没了就好像没办法恢复。
darrenfang
2016-12-22 19:06:56 +08:00
git reflog
darrenfang
2016-12-22 19:08:40 +08:00
@Rice 没提交的也可以找回,但是可能不完整,好像是这个命令 git fsck --lost-found
hronro
2016-12-22 19:12:56 +08:00
借楼问个问题,是我以前遇到的问题。当时在修改了大量代码后,在没有 commit 也没有 add 的情况下切换到别的分支去了,导致修改全丢了。当时是花了两天时间手动把所有的代码重新再写了一遍,不知道各位老司机还有什么别的方法没😂
50vip
2016-12-22 19:13:18 +08:00
你是 git push origin master -f ?
SoloCompany
2016-12-22 21:26:25 +08:00
@hronro 你难道 checkout 命令在分支后面多打了个点?貌似 checkout 命令这个行为是挺坑爹的。明明是 svn revert 命令要比 git checkout 合理的多
mingyun
2016-12-22 23:02:18 +08:00
@skydiver 老司机
lifanxi
2016-12-22 23:38:01 +08:00
看到 git 误操作的问题,我就推荐一下这个:
http://sethrobertson.github.io/GitFixUm/fixup.html
darrenfang
2016-12-23 07:32:29 +08:00
@hronro 没有 add 的没试过,上次 add 之后 git reset --hard 了😂然后在 lost found 里面一个个找回来了
bbbb
2016-12-23 09:10:30 +08:00
@Rice 哈哈哈,,我也想到了当初开始用 git 的时候,各种冲突,一直在想,这么傻逼的玩意有啥好用的。。。曾经还把一份代码复制多分。慢慢的发现是自己傻逼了。
bbbb
2016-12-23 09:14:11 +08:00
@lifanxi 好,先收藏了。我之前也买了一本 git 的书,打算好好学习下 git 。。。只不过一直没看,看来还是得抽时间了解下。

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

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

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

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

© 2021 V2EX