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

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

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