git push -f 了之后有后悔药可以吃么 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
Yo_oY
V2EX    git

git push -f 了之后有后悔药可以吃么

  •  
  •   Yo_oY 2014-06-09 16:29:40 +08:00 26268 次点击
    这是一个创建于 4144 天前的主题,其中的信息可能已经有所发展或是发生改变。
    git push -f 的时候写错了分支名,把develop分支给覆盖了,但是本地的develop进度还是几个小时之前的,所以这之后别人提交到远端develop分支的进度就没了。

    有没有什么方法可以取消这个操作?还是只能让别人重新提交了?

    谢谢。。。。
    13 条回复    2014-06-10 13:48:12 +08:00
    YufunHe
        1
    YufunHe  
       2014-06-09 16:33:10 +08:00
    额 帮顶,刚才刚-f了一个,还好没弄错……
    ToughGuy
        2
    ToughGuy  
       2014-06-09 16:44:40 +08:00
    今天用git rm -rf 之前忘记commit
    现在正失落ing...
    ijse
        3
    ijse  
       2014-06-09 16:50:17 +08:00
    应该可以用git reset或者revert来找回,记录还是有的
    clino
        4
    clino  
       2014-06-09 16:58:41 +08:00   1
    重新 git push -f 原来的版本不就好了?
    还没gc的话可以用git reflog来找之前丢的版本
    hexor
        5
    hexor  
       2014-06-09 17:02:38 +08:00   1
    这样没办法的.

    假设你冲掉了A的提交, 而且你之前又没把A的提交拉到你的本地, 那么这样一来A的提交就只存在于A的本地了(假设没有另外的人在你冲掉之前拉过A的提交的话).

    reflog的话应该只适用于在你本地存在过的commit都能找回来, 但是A的提交根本没在你本地存在过.

    不过这不是很严重吧 让A再提交一次就可以啦, 成本还是很低的.

    以上.
    smalldirector
        7
    smalldirector  
       2014-06-09 17:18:02 +08:00
    上周末,我更蛋疼,我居然执行了rm -rf ~命令,敲下回车的那一刹那,一万个草泥马在我心中奔腾~~
    clowwindy
        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
    neevek
        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。
    Panic
        10
    Panic  
       2014-06-09 19:05:06 +08:00
    git果然是给专家用的
    ichou
        11
    ichou  
       2014-06-10 11:09:56 +08:00
    我默默的去百度 -f 是干嘛的去了
    jamiesun
        12
    jamiesun  
       2014-06-10 13:45:15 +08:00
    @smalldirector 做好备份就好,
    rm -fr 还是相当贴心的。
    我又一次因为/usr/local搞乱了搞不定,就直接 rm -fr /usr/local,然后将备份恢复省了折腾时间。
    smalldirector
        13
    smalldirector  
       2014-06-10 13:48:12 +08:00
    @jamiesun 是的,幸亏两天前用time machine备份过一次,不过还是丢了这两天的一些改动~~现在弄得我硬盘天天插着备份了~~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2881 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 14:08 PVG 22:08 LAX 07:08 JFK 10:08
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86