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

rebase 后为什么顺序是 v1<- v2 <- v3.5 <- v3 而不是 v1<- v2 <- v3 <- v3.5

  •  
  •   rationa1cuzz · 2021-09-18 14:14:06 +08:00 · 983 次点击
    这是一个创建于 1163 天前的主题,其中的信息可能已经有所发展或是发生改变。
    [develop]> git checkout -b my_feat
    [my_feat]> git checkout develop
    [develop]> vi v3
    [develop]> git add . && git commit -m "v3" && git push
    [develop]> git checkout my_feat
    [my_feat]> vi v3.5
    [my_feat]> git add . && git commit -m "v3.5"
    [my_feat]> git checkout develop
    [develop]> git rebase my_feat
    [develop]> git log --oneline --graph
    * bf99dd35 v3
    * bf99dd34 v3.5
    * bf99dd33 v2
    * bf99dd32 v1
    [develop]> git rebase my_feat //无法 push 提示需要 pull
    [develop]> git rebase origin/develop
    * bf99dd35 v3.5
    * bf99dd34 v3
    * bf99dd33 v2
    * bf99dd32 v1
    develop]> git push
    好奇为什么?第一次 git rebase my_feat 的时候后提交 commit 还跑到前面去了,重新 git rebase origin/develop 就正常了
    2 条回复    2021-09-18 18:32:06 +08:00
    xiadong1994
        1
    xiadong1994  
       2021-09-18 15:21:55 +08:00 via iPhone   ❤️ 1
    你的 develop 是 1 、2 、3,my_feat 是 1 、2 、3.5,你在 develop 上 rebase my_feat,develop 与 my_feat 相比多一个 commit 3,这个 commit 就会被 re 到 my_feat 这个 base 上,所以是 1 、2 、3.5 、3 。你的 origin/develop 此时还是 1 、2 、3 因为没有 push,你 pull 了以后本地 develop 包含了所有远程分支的 commit 所以 history 没变,这时你再 rebase 到 origin/develop,那么本地 develop 分支与新 base origin/develop 的区别就是多了 v3.5,这个 commit 被 re 到了 origin/develop 这个 base 上,就变成了 1 、2 、3 、3.5 。
    msg7086
        2
    msg7086  
       2021-09-18 18:32:06 +08:00   ❤️ 1
    因为你把 develop 的根基改变了。

    Rebase 的中文翻译,变基,其实算是比较贴切的。

    第一次运行的时候,
    develop 上是 1 - 2 - 3
    my_feat 上是 1 - 2 - 3.5
    你在 develop 上变基 my_feat,就是说,my_feat 作为新的根基,在这之上,把 develop 的提交追加上去。
    那么 my_feat 的 1 - 2 - 3.5,到这里不变,后面加上 develop 里多出来的 3,自然就是你说的结果了。

    第二次运行的时候,
    develop 上是 1 - 2 - 3.5 - 3
    origin/develop 上是 1 - 2 - 3
    你现在是让 develop 去变基 origin/develop,就是说,origin/develop 作为新的根基,在这之上,把 develop 的提交追加上去。
    那么 origin/develop 的 1 - 2 - 3,到这里不变,后面加上 develop 里多出来的 3.5,这就是你最终看到的结果了。

    关键点在于,变基时,基是不会改变的,所以第一次你的根基是 my_feat,那么 my_feat 是什么样,就是什么样,3 是不可能插入到 my_feat 的中间去的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   878 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 21:02 · PVG 05:02 · LAX 13:02 · JFK 16:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.