V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
zo
V2EX  ›  git

关于 git 多分支合并的问题

  •  
  •   zo · 2017-11-14 09:38:20 +08:00 · 4166 次点击
    这是一个创建于 2574 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有两个分支分别是 master 主分支和 feature 功能分支,feature 分支是从 master 分支开出来的功能分支。我想把 feature 分支合并到主分支 master 上去。

    1. 正常的操作步骤是切换到 master 分支 -> 从远程分支拉取最新内容 -> 合并 feature 功能分支。
    2. 如果我在 feature 分支合并了 master 分支( master 分支很可能不是远程的最新分支),然后从 master 合并 feature 分支会出现什么问题?
    3. 我按照第二种的操作现在是将其他人的代码回滚到某一个时间点了,而且他们无法再把各自的分支合并到 master 分支了。有没有什么办法解决?
    4. 我尝试使用 revert 回滚了在 feature 分支中合并 master 分支的那一个 commit 点,目的是摘除错误合并进来的 master 分支。但是在切换到 master 上合并 feature 时, 从 feature 分支建立的时间点开始,合并到 master 分支的所有功能全部没有了,貌似更严重了。。。。
    16 条回复    2017-11-17 11:20:37 +08:00
    zo
        1
    zo  
    OP
       2017-11-14 09:45:21 +08:00
    慢等
    fds
        2
    fds  
       2017-11-14 09:59:24 +08:00
    checkout 到 master 分支上
    git merge --squash feature
    将 feature 分支上所有修改作为一个提交加到 master 上,检查一下所有修改即可。当然分支的历史就不在主分支了,但一般开发分支的历史也不重要。
    zo
        3
    zo  
    OP
       2017-11-14 10:02:43 +08:00
    @fds 我去试一试
    finull
        4
    finull  
       2017-11-14 10:28:41 +08:00
    4. revert 方式并不是回滚,是添加了 revert commit 的 feature,这时候在 merge 到 master 的是后,这个 commit 就相当于 revert 了 master 的对应修改

    你应该使用 reset --hard 重置分支的指向 而不是 revet

    在 feature 分支上的操作也是这样,尽量不要去 merge master 到 feature
    而是使用 rebase 移动 feature 相对于 master 的位置


    另外 第 2 点,我觉得不应该有什么问题
    finull
        5
    finull  
       2017-11-14 10:30:22 +08:00
    关于 git 操作,真心推荐《 Pro Git 》 这本书

    右键也有这本书的链接
    https://git-scm.com/book/zh/v2
    zo
        6
    zo  
    OP
       2017-11-14 10:32:31 +08:00
    @finull 是多人分支,reset --hard 不好操作。我也觉得第二点应该不是什么问题才对,但是总有一些代码回退了
    finull
        7
    finull  
       2017-11-14 10:44:11 +08:00
    这种 feature 分支也是多人分支吗?

    如果 master 已经推到了远程 repo,要修复 master 那只能对 master 继续 revert 了
    feature 分支的话,建议找到之前的 commit 检出新分支吧


    强迫症真心不能接受 revert revert commit 这种鬼
    skydiver
        8
    skydiver  
       2017-11-14 10:48:47 +08:00 via Android
    2 操作没问题
    4 是因为 revert 是一个新的 commit,也被 merge 到 master 了,可以 revert revert
    neoz
        9
    neoz  
       2017-11-14 12:54:51 +08:00
    我现在的流程基本如下
    1. 主分支 checkout 新分支( feature fix 之类
    2. 提 mr/pr
    3. 各种开发
    4. 一小段时间就去更新下主分支
    5. git rebase -i <主分支>,顺带合并 commit 等操作
    6. push
    7. 持续 3- 6,期间持续 review
    8. 开发完结后 reviewer 正常 merge 到主分支
    besto
        10
    besto  
       2017-11-14 13:01:38 +08:00
    同意楼上你需要定期和 master 同步, 做 rebase.

    如果是想强行合并, 推荐把内容用 git format-patch 弄出来, 然后 先 git am, 可以最好, 不行再 patch -pn < 打
    zdt3476
        11
    zdt3476  
       2017-11-14 14:02:23 +08:00
    定期 rebase.拉远端代码也尽量 git pull --rebase
    wwwyiqiao
        12
    wwwyiqiao  
       2017-11-14 19:52:21 +08:00
    我一般是这样的
    1、比如现在 mster 是 1.0.0,我拉一个 feature 分支,这个 feature 分支的基线相当于 1.0.0
    2、过一段时间,我 feature 分支开发完成了,想集成到 master,但是 master 升到了 1.2.0
    3、这个时候将 feature 升级基线到 1.2.0, 这个时候可能有冲突
    4、master 合并 feature,这个时候可能的冲突就比较小了
    zo
        13
    zo  
    OP
       2017-11-17 10:56:42 +08:00
    @finull feature 也是多人分支,是一个小功能,多个人在参与
    zo
        14
    zo  
    OP
       2017-11-17 10:57:45 +08:00
    @besto 定期同步用 git pull 不是一样的么? rebase 方式会更好是吗?
    besto
        15
    besto  
       2017-11-17 11:12:55 +08:00
    @zo 见楼上 git pull --rebase 就一样了
    zo
        16
    zo  
    OP
       2017-11-17 11:20:37 +08:00
    @besto 大概知道为什么用 rebase 的方式了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2589 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 03:18 · PVG 11:18 · LAX 19:18 · JFK 22:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.