Git master 分支需要回退怎么办? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
0xABCD
V2EX    程序员

Git master 分支需要回退怎么办?

  •  1
     
  •   0xABCD 2018-11-16 23:19:25 +08:00 6812 次点击
    这是一个创建于 2573 天前的主题,其中的信息可能已经有所发展或是发生改变。

    由于某种原因,生产环境的某个功能需要撤掉,但是别的功能已经基于 master 分支开发挺远的了,现在 master 回退倒是好办,难的是基于那个点的 master 分支开发的 feature 分支怎么撤掉那个功能,并且保留现有代码?

    目前我想到的方案是: 重新从回退后的 master 分支新开一个分支 A,然后通过 cherry-pick 将在 feature 分支上的 commit 在新分支 A 应用一次。但是 commit 已经较多了,所以这个方案比较笨。

    git 有没有类似分支做集合运算的功能:new_feature = old_feature - new_master ?

    12 条回复    2018-11-17 16:20:12 +08:00
    takeoffyoung
        1
    takeoffyoung  
       2018-11-16 23:24:18 +08:00
    git revert 有什么需求不能满足吗?
    xyz1001
        2
    xyz1001  
       2018-11-16 23:28:09 +08:00 via Android   1
    git rebase -i master,将不需要的 commit 标记为 drop
    mcfog
        3
    mcfog  
       2018-11-16 23:31:13 +08:00 via Android
    你把 master 搞定以后别的分支 merge master 不就好了
    chinvo
        4
    chinvo  
       2018-11-16 23:35:03 +08:00 via iPhone   1
    master 上 revert,别的分支 merge 进去的时候会符合的,如果有冲突人工处理下
    0xABCD
        5
    0xABCD  
    OP
       2018-11-16 23:50:03 +08:00
    @takeoffyoung @xyz1001 @mcfog @chinvo commit 有点多哦,一个一个 revert 有点麻烦,主要是想问一下有没有更便捷的方案类似集合运算那种,谢谢回复
    oott123
        6
    oott123  
       2018-11-17 00:30:01 +08:00
    https://harttle.land/2018/03/13/remove-certain-commits-from-history.html#header-3
    Arnie97
        7
    Arnie97  
       2018-11-17 00:59:12 +08:00 via Android
    二楼正解,不再复述
    mcfog
        8
    mcfog  
       2018-11-17 08:28:08 +08:00 via Android   1
    @0xABCD 要干掉的功能不是独立一个分支?的话没救了只能手动

    独立的话,revert merge commit 一个应该就好了吧
    就算不行,也可以这样手动生成:
    1. 在 master 分支被合并之前的最新分支记个 branch 叫 tmp (或者 copy 下 hash 也可以)
    2. checkout 不要的那个 feature branch,rebase 到 tmp,用 squash 压缩成一个,过程要解决的冲突应该和 merge 是一样的,原样解决
    3. revert 刚刚 rebase 形成的一个 commit
    4. 你应该还在 feature branch,checkout 最新 master,Cherry pick 你在 feature branch 刚才 revert 形成的 commit

    不管我的做法对不对或者你看没看懂,劝你不要改变已经被 push 的历史,除非你和你的团队所有人都明白这里面的道理
    quinoa42
        9
    quinoa42  
       2018-11-17 08:52:29 +08:00
    master revert, feature 分支 rebase 下
    wweir
        10
    wweir  
       2018-11-17 15:04:47 +08:00 via Android
    1、基于 master 新建临时分支
    2、reset master 到刚合并需要回滚代码的状态
    3、revert master 上不需要的 commit
    4、merge 临时分支
    wweir
        11
    wweir  
       2018-11-17 15:06:24 +08:00 via Android
    @wweir 这么一套复杂操作的好处是 可以保留所有 commit 记录
    msg7086
        12
    msg7086  
       2018-11-17 16:20:12 +08:00
    我们的习惯是 force push 一把梭。如果你们玩 Git 还没熟到能承受一把梭的话,就只能把整个更改集 revert 掉以后把别的分支 rebase 一下。如果你们还没熟到能承受 rebase 的话,就只能把 revert commit 给 cherry pick 进 feature 了。

    简单说,看你们 Git 玩得 6 不 6,以及对 Git history 的洁癖程度有多高。
    a href="/about" class="dark" target="_self">关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4415 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 04:02 PVG 12:02 LAX 20:02 JFK 23:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86