git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
malkavia
V2EX  ›  git

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

  •  
  •   malkavia · Nov 22, 2016 · 4770 views
    This topic created in 3466 days ago, the information mentioned may be changed or developed.
    使得所有在 master 上,不在 feature 上的几十条 commit 又重新被提交了一遍

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

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

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