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 ![]() 重新 git push -f 原来的版本不就好了? 还没gc的话可以用git reflog来找之前丢的版本 |
![]() | 5 hexor 2014-06-09 17:02:38 +08:00 ![]() 这样没办法的. 假设你冲掉了A的提交, 而且你之前又没把A的提交拉到你的本地, 那么这样一来A的提交就只存在于A的本地了(假设没有另外的人在你冲掉之前拉过A的提交的话). reflog的话应该只适用于在你本地存在过的commit都能找回来, 但是A的提交根本没在你本地存在过. 不过这不是很严重吧 让A再提交一次就可以啦, 成本还是很低的. 以上. |
7 smalldirector 2014-06-09 17:18:02 +08:00 上周末,我更蛋疼,我居然执行了rm -rf ~命令,敲下回车的那一刹那,一万个草泥马在我心中奔腾~~ |
8 clowwindy 2014-06-09 18:26:59 +08:00 ![]() 如果远程没 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备份过一次,不过还是丢了这两天的一些改动~~现在弄得我硬盘天天插着备份了~~ |