[ git rebase ] 操作 - 关于远端代码回退的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
maobukui
V2EX    git

[ git rebase ] 操作 - 关于远端代码回退的问题

  •  
  •   maobukui Jun 12, 2022 2404 views
    This topic created in 1418 days ago, the information mentioned may be changed or developed.

    请教下 git rebase 的操作

    当前状态:

    本地 feature 开发,做了多次本地 commit 后,在同步到远程前,先做了 fetch ,获取 master 最新的远程代码,然后本地 rebase 操作,未 push 。

    碰到的问题:

    远程的代码有问题做了回退,这时候本地怎么处理比较好?

    我尝试了几个方案,都有些复杂。 把自己 rebase 的代码 reset ,本地 stash 保存,然后操作 master 代码回退后,再次 rebase 。这样比较麻烦,有没有更简单的操作?

    场景说明:

    master C1 -> C2 -> C3... Cn feature C1 -> C2 -> C3... Cn -> A1 -> A2 远端把一部分代码做了回退,用了 reset --hard ,本地需要把中间的一些改动去掉 
    8 replies    2022-06-12 22:35:14 +08:00
    darkengine
        1
    darkengine  
       Jun 12, 2022
    如果 feature 分支的 commit 不多,试试 cherry-pick 到当前的远程分支上吧
    nwu2Cv8OZ2MZMg39
        2
    nwu2Cv8OZ2MZMg39  
       Jun 12, 2022
    直接重新 fetch ,重新 rebase 就好了
    leo108
        3
    leo108  
       Jun 12, 2022
    rebase -i ,在弹出的编辑框里把远端删掉的 commit 对应删除即可
    jeffh
        4
    jeffh  
       Jun 12, 2022
    你的操作是对的,并且建议合并远程时使用 git merge --squash ,rebase 有时候会有很多冲突,不如 merge 划算
    rosu
        5
    rosu  
       Jun 12, 2022
    感觉应该没有了,因为你总是要 pull master 的代码的。远端 reset 的情况下,本地相当于分叉了。

    题外话,为什么允许 master reset 后 force push ,这对团队其他人太不友好了。应该禁止 reset ,改为 revert 。
    closedevice
        6
    closedevice  
       Jun 12, 2022
    对于像楼主的这种情况,方法挺多,无论是 rebase -i ,还是重建分支再 cp commit ,还是在当前分支 reset 后再 cp 、rebase 都行,但最重要的是在稳定分支上要尽量避免 reset --hard 操作后 push -f 操作,用 revert 来代替.(PS:由于之前踩坑太多,一般我自己习惯于将多个相关的 commit 做成一个 commit ,方便后续操作;)
    ethusdt
        7
    ethusdt  
       Jun 12, 2022   2
    1. cherry-pick:
    [master]$ git cherry-pick 123474
    [master]$ git cherry-pick 123475

    2. rebase:
    [bug]$ git branch temp 123475 # a
    [bug]$ git rebase --onto master 123474^ temp # b
    [bug]$ git checkout master # c
    [master]$ git reset --hard temp # d

    3. rebase -i:
    [dev]$ git checkout -b bug-to-merge-into-master
    [bug-to-merge-into-master]$ git rebase -i 123471 123475
    d 123471
    d 123472
    d 123473
    p 123474
    p 123475
    [bug-to-merge-into-master]$ git checkout master
    [master]$ git merge bug-to-merge-into-master

    4. merge + revert
    [master]$ git merge dev
    [master]$ git revert -n 123471
    [master]$ git revert -n 123472
    [master]$ git revert -n 123473
    [master]$ git commit -m "revert"

    5. patch
    [bug]$ git format-patch 123474^..123475 --stdout > ~/Downloads/part.patch
    [bug]$ git checkout master
    [master]$ git am --signoff < ~/Downloads/part.patch
    ethusdt
        8
    ethusdt  
       Jun 12, 2022
    https://faichou.com/skip-some-commits-when-doing-merge/ 之前也遇到过类似问题, 找过几个方法.
    About     Help     Advertise     Blog     API     FAQ     Solana     930 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 19:14 PVG 03:14 LAX 12:14 JFK 15:14
    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