V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
malkavia
V2EX  ›  git

求教...把 feature 分支给 rabase 到了 master 上,并且 push 了....怎么破?

  •  
  •   malkavia · 2016-11-22 15:57:02 +08:00 · 4022 次点击
    这是一个创建于 2923 天前的主题,其中的信息可能已经有所发展或是发生改变。
    使得所有在 master 上,不在 feature 上的几十条 commit 又重新被提交了一遍

    只能 reset --hard 到拉出 feature 分支的节点上将原本在 master 上的 commit 重新 cherry-pick ,再 merge feature 分支吗?

    还是说就让它们放在那里,不管了?

    p.s. 为了避免更乱,已经叫同事们暂时不要 push 代码了,可以用 push --force 来回退
    16 条回复    2016-11-23 15:45:24 +08:00
    lonenol
        1
    lonenol  
       2016-11-22 16:02:30 +08:00   ❤️ 1
    本地回退,删掉远程分支,重新 push ,master 分支的话要去掉分支保护功能
    alexapollo
        2
    alexapollo  
       2016-11-22 19:48:19 +08:00
    reset 到上一次操作
    yxzblue
        3
    yxzblue  
       2016-11-22 19:53:25 +08:00
    有什么是 revert 做不到的?
    cxh116
        4
    cxh116  
       2016-11-22 19:57:17 +08:00 via Android
    @yxzblue rebase 不是 merge ,用 revert 还真做不到。就跟 merge 加了 ff 参数,不会生成 commit ,一样不能用 revert 。
    XiaoxiaoPu
        5
    XiaoxiaoPu  
       2016-11-22 19:59:23 +08:00   ❤️ 3
    git reflog 里找到 rebase 操作前的 hash , git check ${hash} 就可以回到操作前 master 所在的 commit ,重新建一个 master 分支,然后 git push --force origin master
    hantsy
        6
    hantsy  
       2016-11-22 22:54:58 +08:00
    reset, cherry pick.
    zwzmzd
        7
    zwzmzd  
       2016-11-23 00:30:04 +08:00 via Android
    个人觉得 5 楼方法靠谱,好多次干了挫事都是靠 reflog 救命
    Rabbit52
        8
    Rabbit52  
       2016-11-23 00:43:10 +08:00
    reset && push -f && 通知所有人~
    msg7086
        9
    msg7086  
       2016-11-23 07:08:06 +08:00   ❤️ 1
    我的建议,如果你实在搞不清分支间要怎么处理,那么最好还是弄个图形界面。
    安利一下 SmartGit ,打开 Log 界面,把 Commit 理顺了,然后 force push 一次解决问题。
    这种危险操作我真心不推荐用命令行来搞。
    msg7086
        10
    msg7086  
       2016-11-23 07:09:56 +08:00
    另外说一句。如果 master 的提交被复制到了 feature 上,这种情况是他 rebase 了 master 到 feature ,而不是你标题说的 feature 给 rebase 到 master 上。后者是很安全的,我们天天在做,前者才是反向 rebase ,才是大问题。
    shanjinwei
        11
    shanjinwei  
       2016-11-23 08:10:21 +08:00 via Android
    对此差异,修改过后上传
    malkavia
        12
    malkavia  
    OP
       2016-11-23 09:16:00 +08:00
    @XiaoxiaoPu 我这样试过, checkout 到之前的 hash 上之后,会丢掉所有 <生成两次 commit 的提交>
    malkavia
        13
    malkavia  
    OP
       2016-11-23 09:16:42 +08:00
    @msg7086 是的是的,我发帖的时候没有理清,确实是反向 Rebase
    rashawn
        14
    rashawn  
       2016-11-23 10:05:09 +08:00 via iPhone
    最简单的就是 checkout 回去 新建分支 删掉远程 然后覆盖
    shihty5
        15
    shihty5  
       2016-11-23 11:28:23 +08:00
    reflog 能记录下所有分支所有事件。
    通过时光机回到过去某个节点,然后重新开始就好了。
    真希望人生也是这样。
    iluhcm
        16
    iluhcm  
       2016-11-23 15:45:24 +08:00
    Sourcetree+ git reset --hard 已经拯救了无数回
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   955 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:40 · PVG 06:40 · LAX 14:40 · JFK 17:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.