1
YufunHe 2014-06-09 16:33:10 +08:00
额 帮顶,刚才刚-f了一个,还好没弄错……
|
2
ToughGuy 2014-06-09 16:44:40 +08:00
今天用git rm -rf 之前忘记commit
现在正失落ing... |
3
ijse 2014-06-09 16:50:17 +08:00
应该可以用git reset或者revert来找回,记录还是有的
|
4
clino 2014-06-09 16:58:41 +08:00 1
重新 git push -f 原来的版本不就好了?
还没gc的话可以用git reflog来找之前丢的版本 |
5
hexor 2014-06-09 17:02:38 +08:00 1
这样没办法的.
假设你冲掉了A的提交, 而且你之前又没把A的提交拉到你的本地, 那么这样一来A的提交就只存在于A的本地了(假设没有另外的人在你冲掉之前拉过A的提交的话). reflog的话应该只适用于在你本地存在过的commit都能找回来, 但是A的提交根本没在你本地存在过. 不过这不是很严重吧 让A再提交一次就可以啦, 成本还是很低的. 以上. |
6
jsonline 2014-06-09 17:05:30 +08:00 via Android
不要手贱。
|
7
smalldirector 2014-06-09 17:18:02 +08:00
上周末,我更蛋疼,我居然执行了rm -rf ~命令,敲下回车的那一刹那,一万个草泥马在我心中奔腾~~
|
8
clowwindy 2014-06-09 18:26:59 +08:00 2
如果远程没 gc 可能捞得回来。
$ git clone xxx $ cd xxx $ git fsck --lost-found dangling commit 4d4888a3273a5b56d69df69cbf9698fed7c19a36 $ git show 4d4888a3273a5b56d69df69cbf9698fed7c19a36 commit 4d4888a3273a5b56d69df69cbf9698fed7c19a36 Author: clowwindy <[email protected]> Date: Mon Jun 9 12:48:28 2014 +0800 Update README.md ... 确认是你要找的 commit 之后 checkout 这个 commit。然后 $ git branch -D develop $ git branch -b develop $ git push -f origin develop |
9
neevek 2014-06-09 18:52:21 +08:00
可以有些补救方法,首先要找到那个有原来upstream上最新提交的人,让他执行下面这组命令:
方法1: 如果只有两个人(包括你自己): git fetch origin develop git checkout develop git rebase --onto origin/develop SHA1_CULPRIT develop git push origin develop 方法2: 如果多于两个人(包括你自己): git fetch origin develop git checkout develop git cherry-pick SHA1_CULPRIT^..origin/develop (这时候如果有冲突则解决冲突后执行git add .; git cherry-pick --continue) git push -f origin master 对于方法2,确保在执行git push -f的时候其他人没有在做push。 注:SHA1_CULPRIT就是上次你跟upstream同步之后提交的第一个commit的sha1 hash。 最后一个提醒,99%的场景下,你不需要push --force。如果你没有100%确认自己在做什么,没有100%把握知道怎么解决问题,最好别尝试force push。 |
10
Panic 2014-06-09 19:05:06 +08:00
git果然是给专家用的
|
11
ichou 2014-06-10 11:09:56 +08:00
我默默的去百度 -f 是干嘛的去了
|
12
jamiesun 2014-06-10 13:45:15 +08:00
|
13
smalldirector 2014-06-10 13:48:12 +08:00
@jamiesun 是的,幸亏两天前用time machine备份过一次,不过还是丢了这两天的一些改动~~现在弄得我硬盘天天插着备份了~~
|