V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
vunlin
V2EX  ›  问与答

git rebase 是不是就是跟 merge master 到你的 branch 产生代码的效果一样的, 不考虑 history log 等其他的因素

  •  
  •   vunlin · 2014-11-02 10:50:25 +08:00 · 4167 次点击
    这是一个创建于 3666 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  2014-11-02 11:56:28 +08:00
    或者说 rebase 就是merge master 到你的branch 的一种名词和说法
    5 条回复    2014-11-03 09:52:14 +08:00
    iloahz
        1
    iloahz  
       2014-11-02 11:45:01 +08:00   ❤️ 1
    感觉最终结果应该是差不多的,如果大家对解决冲突的意见统一的话
    finian
        2
    finian  
       2014-11-02 12:31:55 +08:00 via Android   ❤️ 1
    看你怎么定义「效果」,如果以最终代码是否一样作为判断标准,则效果是一样的(前提是解决冲突的方式一致),但两种方式的 commit history 有很大不同。

    merge 的优点是能直观地区分 commit 边界(比如能区分哪一坨 commit 是逻辑相关的,如在一个 feature branch 内)。缺点是 merge 多了 commit history 整个看起来可能会很混乱;rebase 的优点是能使 commit history 看起来更清晰,能整成线性的,看起来如同一个人提交地一般。缺点就是 commit 之间的逻辑相关性被去掉了,看不出边界。还有一点很重要,rebase 会修改 commit history,所以解决冲突时要慎重,搞不好会搞丢代码。

    一般建议在开发分支合并到主分支时使用 merge (保留开发分支逻辑边界);开发分支同步主分支更新时使用 rebase (使开发分支 commit history 更清晰)。

    之前我们在同步主分支更新时就使用 rebase,由于当时对 SourceTree 的 rebase 解决冲突的 use mine 和 use their 理解有误,导致代码改动丢失了,幸好 IDE 有本地历史可以恢复。后来考虑到 rebase 会修改历史,最后还是采用 merge 的方式了。
    julyclyde
        3
    julyclyde  
       2014-11-02 17:30:07 +08:00
    @finian lz问的是merge feature branch into master啊。理论上连commit history都应该相同
    vunlin
        4
    vunlin  
    OP
       2014-11-03 00:18:37 +08:00
    @finian 你用merge master 到 分支 branch 来阶段性同步 分支branch 开发吗? 还是等分支好了, 一下子merge 到 master?
    finian
        5
    finian  
       2014-11-03 09:52:14 +08:00
    @vunlin 看具体情况吧,如果 master 有 branch 需要的东西就阶段性 merge,没有就一次性
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2536 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 01:31 · PVG 09:31 · LAX 17:31 · JFK 20:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.