首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

急!!生产环境下git操作失误! 生产环境下新的代码commit后,想把它放入git repository.

  •  
  •   yaotian · 2013-01-24 20:43:40 +08:00 · 3279 次点击
    这是一个创建于 2508 天前的主题,其中的信息可能已经有所发展或是发生改变。
    git push origin master

    ! [rejected] master -> master (non-fast-forward)
    error: failed to push some refs to
    To prevent you from losing history, non-fast-forward updates were rejected
    Merge the remote changes (e.g. 'git pull') before pushing again. See the
    'Note about fast-forwards' section of 'git push --help' for details.

    于是手贱,打了:git fetch origin;git merge origin/master
    这条命令做了很多自动的merge. 服务完全瘫痪!!!!

    我该如何恢复到之前????
    8 回复  |  直到 1970-01-01 08:00:00 +08:00
        1
    fly2never   2013-01-24 20:48:15 +08:00
    git log往回找找,然后git reset重置下状态
        2
    yuelang85   2013-01-24 20:49:48 +08:00
    危险做法:reset

    简单做法:git diff <commit> <commit> > a.patch
        3
    yuelang85   2013-01-24 20:51:22 +08:00
    打出a.patch来之后,patch回去。确定修改的文件都没问题以后,commit。

    reset选项好多,而且不好区别,这种做法会多出一个垃圾commit,但是比较安全,而且 逆向 方便。
        4
    G_virus   2013-01-24 21:32:48 +08:00 via iPhone
    git reset --hard HEAD~

    reset没有那么危险,git很少会真正删除东西。可以用

    git reflag show master

    来看到master分支的整个历史。
        5
    jint   2013-01-24 21:37:51 +08:00
    我认为你有两个失误,第一,生产环境和开发环境没有区分,上生产的代码,起码要打个TAG,再手工备份一份,那么你现在就不会导致服务瘫痪,无计可施了。
    不过毕竟个人开发很难做的那么规范。
    另一个失误是,提交的粒度太大,以至于都不记得做过什么改动了,也就无法人肉rollback了。
        6
    yaotian   2013-01-24 22:03:40 +08:00
    git reset --hard HEAD

    成功恢复!

    谢谢!
        7
    znnet7   2013-01-24 23:30:19 +08:00
    git merge --abort就行了啊 就能回到你merge之前的状态了
        8
    tss   2013-01-25 13:51:50 +08:00
    目前状态先打个tag,然后hard reset到最后正确的commit,再cherrypick有用的commit,再push --force
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2340 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 26ms · UTC 13:53 · PVG 21:53 · LAX 05:53 · JFK 08:53
    ♥ Do have faith in what you're doing.