git 问题咨询 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
JadePenG
V2EX    程序员

git 问题咨询

  •  
      JadePenG 2022-04-05 20:59:30 +08:00 3666 次点击
    这是一个创建于 1352 天前的主题,其中的信息可能已经有所发展或是发生改变。

    git 用的比较少, 所以来询问一下大佬们,我遇到如下场景有什么方式可以处理。 目前项目只有一个分支,master 分支。 假如我目前在开发当前项目的 V1.2 版本,但是 V1.1 版本有 BUG 时,我需要修改对应的代码。 但是 V1.2 版本的新功能不可能在一次 BUG 修复中就发布出来。那么此时我应该怎么处理 V1.2 版本新功能的代码呢?

    可以不通过新建一次分支的情况下处理嘛。 [这是重点哦]

    33 条回复    2022-04-06 17:00:43 +08:00
    fiypig
        1
    fiypig  
       2022-04-05 21:05:02 +08:00 via iPhone
    同问
    dvsilch
        2
    dvsilch  
       2022-04-05 21:10:55 +08:00
    在本地新建一个分支推到 master 都不行吗?
    gengchun
        3
    gengchun  
       2022-04-05 21:12:11 +08:00
    用分支

    https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell


    Because a branch in Git is actually a simple file that contains the 40 character SHA-1 checksum of the commit it points to, branches are cheap to create and destroy. Creating a new branch is as quick and simple as writing 41 bytes to a file (40 characters and a newline).
    pagxir
        4
    pagxir  
       2022-04-05 21:14:20 +08:00 via Android   1
    这个跟 git 没关系吧,这个是分支管理的问题,即使你换成 SVN 也一样需要考虑怎么去管理分支,什么时候合并分支
    marat1ren
        5
    marat1ren  
       2022-04-05 21:16:04 +08:00 via iPhone
    假设 v1.2 还是在你的本地 master ,那么你可以先把 v1.1 的修复 push 到 master 上去。然后 rebase 有修复的 master 。第二种情况,如果 master 上已经是 v1.2 了,那只能建议新建一个基于 v1.1 的 branch ,把修复 push 到这个新 branch 上。
    CEBBCAT
        6
    CEBBCAT  
       2022-04-05 21:19:48 +08:00 via iPhone
    你要是实在想问,那么 stash 可以解决你的问题,rebase+checkout 也许也可以

    但是你这么做,用的还是 git 吗?以上操作有较高的丢失代码的风险。你未来开发到 2.0 的时候,又该要怎么修复 1.1 的 bug 呢?
    nightwitch
        7
    nightwitch  
       2022-04-05 22:09:06 +08:00
    先从你当前远程的那个 commit id 分叉一个分支 v1.1 ,然后修复 bug ,push 到远端。
    本地的 master 有一堆 v1.2 的代码还没实现完,rebase 到修复完 bug 的分支上。
    christin
        8
    christin  
       2022-04-05 22:15:45 +08:00 via iPhone
    只有一个分支万一出问题怎么办 建议多开几条分之,又不要钱
    msg7086
        9
    msg7086  
       2022-04-05 23:57:09 +08:00   1
    不新建分支还用什么 git 。你就算是新建文件夹( 1 )那也是分支啊。
    zkd8907
        10
    zkd8907  
       2022-04-06 00:12:12 +08:00
    在一些管理的方式下 v1.1 应该是一个 tag ,它会指向到 master 上的一个 commit 。如果 v1.2 在 master 上开发并且又要修改 v1.1 的 bug ,可以直接从 v1.1 的 tag 拉一个新的 hotfix 分支进行开发修复,修复后通过打 v1.1.1 tag 进行发布,同时将 master 也 rebase 到 v1.1.1 上,这样 master 也会包含这个改动。
    FieldFarmer
        11
    FieldFarmer  
       2022-04-06 01:09:10 +08:00 via Android
    另开一个目录重拉远程 v1.1 版本的项目代码,修复后推到远程。
    v1.2 commit 后,git pull ,有冲突解决冲突,没冲突继续开发
    AItsuki
        12
    AItsuki  
       2022-04-06 01:37:26 +08:00
    异想天开,我想不出能比新建一个 bugfix 分支更简单的方式。
    duke807
        13
    duke807  
       2022-04-06 04:33:21 +08:00 via Android
    op 最大的其是 git 用的不熟,我的念一直是:git 必要非常熟悉,才能提高工作效率,否反而降低工作效率,搞不好把自己坑死
    dangyuluo
        14
    dangyuluo  
       2022-04-06 05:39:29 +08:00
    @zkd8907 正常情况下应该有一个 release-v1 的分支,然后 v1.1 这个 tag 应该指向 release-v1 上的一个 commit 。这时把修复 push 到 release-v1 上,再创建一个 v1.1.1tag 就可以了。定期的,相关 fix 应该被 cherry-pick 到 maste 上
    caeger
        15
    caeger  
       2022-04-06 08:33:22 +08:00 via Android
    git 创建新分支要开始收费了?
    SenLief
        16
    SenLief  
       2022-04-06 08:38:12 +08:00
    git 的分支开销非常的小啊,随意开新分支就好了。
    caixiangyu17
        17
    caixiangyu17  
       2022-04-06 08:41:41 +08:00
    Trunk Based development + feature toggle flag
    我们就是只有一个分支,所有人直接 push master ,直接 CI/CD 上生产环境,所以这里对 CI/CD 的各种测试要求很高。
    如果不想这么麻烦,可以 CI/CD 直接发布到 test 服务器上,先测,然后手动部署到 prod 上
    tedzhou1221
        18
    tedzhou1221  
       2022-04-06 09:04:33 +08:00
    不新建分支,你可以把修复好的代码 cherry-pick 到 v1.2 分支上。

    我们还有同事试过,在 v1.1 上修复代码并提交后,再把 v1.1 合并到 v1.2
    C02TobNClov1Dz56
        19
    C02TobNClov1Dz56  
       2022-04-06 09:36:26 +08:00
    不用分支还不如不用 git 。git 最大的优点就是分支建立代价很小。
    raykle
        20
    raykle  
       2022-04-06 09:42:02 +08:00
    不新建分支你用什么 git
    SmiteChow
        21
    SmiteChow  
       2022-04-06 10:01:08 +08:00
    在服务器上复制一份代码现改,然后可以生成 patch 文件,最后手动把所有服务器上打 patch 补丁。
    Dockerfile
        22
    Dockerfile  
       2022-04-06 10:07:48 +08:00
    学一下 git 吧,真不难
    lizuoqiang
        23
    lizuoqiang  
       2022-04-06 10:20:34 +08:00
    都用 git 了,还是看看 git 工作流吧
    daimubai
        24
    daimubai  
       2022-04-06 10:42:44 +08:00
    stash 可以解决,把 v1.2 的先暂存
    james2013
        25
    james2013  
       2022-04-06 10:59:15 +08:00
    不新建分支是处理不了的,难道要把 1.2 版本的所有提交记录还原么?
    这种情况,在 1.1 版本最后 1 次 commit 打个 tag,用新分支修改 bug 后,再把这个修复版本打 tag
    ganbuliao
        26
    ganbuliao  
       2022-04-06 11:04:20 +08:00
    git flow 看一下吧
    superfatboy
        27
    superfatboy  
       2022-04-06 11:10:53 +08:00
    git flow xiao 一下吧
    konakona
        28
    konakona  
       2022-04-06 11:16:48 +08:00
    你们是一个分支打了 2 个 tag 来进行版本管理?
    那你先基于 v1.1 的标签创建分支,然后在这个分支上创建一个新的 bugfix or hotfix 分支(这样可以独立 commit id 和文件树),修复完后文件数量应该不多就几个吧?

    ```
    git checkout v1.1
    ...此时修改文件 A 、B 、C
    git add A B C
    git commit -m '修复了 xxx 问题'
    git status #可以看到只有 3 个文件变动
    git -a v1.1.1 -m '修复了 xxx 问题' # 打一个新的 tag

    # 接下来要将修改的这 3 个文件的改动合并到 master 分支
    git checkout master
    git merge v1.1.1
    ```
    konakona
        29
    konakona  
       2022-04-06 11:18:13 +08:00
    上面补充下,我提议的跟我打的命令是 2 个做法。
    提议的是用一些 git flow ( flow 是一个统称,代表流程,比如有 git-flow gitlab-flow GitHub-flow 等等)的方式管理版本。

    如果不用 flow ,就是直接代码片段里那样也可以的。
    fizzzzz
        30
    fizzzzz  
       2022-04-06 11:28:59 +08:00
    不创建分支就是 v1.2 先扔到暂存,改完 bug ,再恢复
    leafre
        31
    leafre  
       2022-04-06 11:40:58 +08:00
    stash 能解决,但是分支用起来啊
    tuutoo
        32
    tuutoo  
       2022-04-06 16:54:38 +08:00
    看一下 git 工作流 如何管理和使用分支。基本上不会在 master 上直接开发的。至少会新建 dev, feature, hotfix 或者 bugfix 这种分支。一言两语说不清。 master 永远对应生产库的最新版,其他的都 checkout 分支出来开发新功能或者 bugfix 。完了再合并回分支。。。
    bugfix 或者新功能上线后,其他正在开发的分支再从 master 合并(merge)或者变基(rebase),这个 rebase 也不能乱用(特别是多人开发同一分支的时候)。用之前先好好看一下。。。
    findex
        33
    findex  
       2022-04-06 17:00:43 +08:00 via iPhone
    rebase 即可
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2889 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 14:50 PVG 22:50 LAX 06:50 JFK 09:50
    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