情况是这样的,在一个 git 仓库添加了两个远程仓库地址 A 和 B ,今天重置的时候不小心将 A 的历史重置到 B 仓库去了,导致 B 仓库 15 号以后提交的历史都没了,而 A 又是远程仓库,一直在更新, B 是在 A 上的分支, A 并没有 pull 到本地,提交的历史其实只存在远程分支上。
平时都有随时 push 的习惯,这段时间不知道怎么回事,没有 push ,远程仓库也是只有 15 号及以前的代码。在提交历史里面没有任何记录。
这次重置保留到了最后一次 Push 到 B 上面的历史,疑似跟远程分支有关,这次重置是否改写了 git 的提交记录?
问题到不严重,这几天时间都花在找问题,梳理逻辑上了,花点时间代码就回来了。
想了解下,这样的情况下,还能找回之前的代码了吗?当看到没有历史记录的时候,我其实基本是放弃了的,当时傻逼的把工程关了,不然可能还能在工程里把代码找回些。
看到没有历史记录的瞬间,内心不知道怎么形容。。。
1
skydiver 2016-12-22 16:55:11 +08:00 1
git reflog 找到之前的那个提交的 sha1 ,然后 co 过去就行了
|
2
dong3580 2016-12-22 16:58:03 +08:00
前天遇到.
git log 看不到, 欲哭无泪,最后发现线上分支可以看到 log,然后切到线上写的变动的那个 sha1 上,拿到代码后对比线下重新覆盖上了. |
3
besto 2016-12-22 17:03:30 +08:00
前提是没有做 git gc ,而没 gc 就太简单了。
1L 的做法就可以,你可以选择用 git fsck --lost-found 找到最后一个提交的 commit id 就可以。 |
7
wwulfric 2016-12-22 17:50:20 +08:00
这种问题 3 条路:
|
8
wwulfric 2016-12-22 17:51:36 +08:00
1. git reflog (基本上这个就可以了,不小心强推分支也可以靠它恢复)
2. 没有提交远程的话,从远程重新 fetch 3. 提交远程的话,从别的同事那里恢复 |
9
bbbb OP @wwulfric 嗯,思路学习了。
以后就得多提交,提交了就有救。 git 现在没有研究得太多,出现问题后,第一时间保留好分支,上网查了下,关键字没弄对。没查到,恢复后,又重新查了下 git 恢复分支就找到了。 其实出现问题后,虽然不是什么大问题,但是说不出的感觉。。。 |
10
Rice 2016-12-22 19:00:18 +08:00 via iPhone
当初第一次用 git 的时候,我就模拟了开发时可能遇到的情况各种瞎整。最后我发现 git reflog 这个命令绝大多数情况可以恢复历史。
然后没提交的代码整没了就好像没办法恢复。 |
11
darrenfang 2016-12-22 19:06:56 +08:00 via iPhone
git reflog
|
12
darrenfang 2016-12-22 19:08:40 +08:00 via iPhone
@Rice 没提交的也可以找回,但是可能不完整,好像是这个命令 git fsck --lost-found
|
13
hronro 2016-12-22 19:12:56 +08:00 via Android
借楼问个问题,是我以前遇到的问题。当时在修改了大量代码后,在没有 commit 也没有 add 的情况下切换到别的分支去了,导致修改全丢了。当时是花了两天时间手动把所有的代码重新再写了一遍,不知道各位老司机还有什么别的方法没😂
|
14
50vip 2016-12-22 19:13:18 +08:00
你是 git push origin master -f ?
|
15
SoloCompany 2016-12-22 21:26:25 +08:00
@hronro 你难道 checkout 命令在分支后面多打了个点?貌似 checkout 命令这个行为是挺坑爹的。明明是 svn revert 命令要比 git checkout 合理的多
|
17
lifanxi 2016-12-22 23:38:01 +08:00
看到 git 误操作的问题,我就推荐一下这个:
http://sethrobertson.github.io/GitFixUm/fixup.html |
18
darrenfang 2016-12-23 07:32:29 +08:00 via iPhone
@hronro 没有 add 的没试过,上次 add 之后 git reset --hard 了😂然后在 lost found 里面一个个找回来了
|
19
bbbb OP @Rice 哈哈哈,,我也想到了当初开始用 git 的时候,各种冲突,一直在想,这么傻逼的玩意有啥好用的。。。曾经还把一份代码复制多分。慢慢的发现是自己傻逼了。
|
20
bbbb OP @lifanxi 好,先收藏了。我之前也买了一本 git 的书,打算好好学习下 git 。。。只不过一直没看,看来还是得抽时间了解下。
|
21
bbbb OP @darrenfang 我用的这个命令找回来的, git fsck --lost-found 也看了,记录不好区分是哪一次的。
|
23
wweir 2016-12-23 10:19:02 +08:00 via Android 1
@hronro
当前分之有改动的情况下,只能切到没有冲突的分支,这种情况是可以完好切回来的。 如果有冲突,会提示冲突,切不走的。 当然,如果是习惯下各种强制性的命令切,那是自作孽,自认倒霉吧。就好比 rm -rf 怪不得别人。 在公司里,我是一直强烈推荐命令行下用 git 辅助工具如: oh-my-zsh 。不愿意装的话,就 **必须** 做到敲完每个 git 命令之后敲一次 git status |
24
xiuc001 2016-12-23 14:59:32 +08:00
只要你的代码提交过,你就能在 git 上找回来,因为 git 会报错所有的历史提交记录
|
25
darrenfang 2016-12-23 16:27:37 +08:00
@bbbb 对, 我一个个看的😂 还好不多
|