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

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

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