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

关于 git rebase 的一点疑问

  •  
  •   caneman · 2019-12-03 18:08:55 +08:00 · 3024 次点击
    这是一个创建于 1808 天前的主题,其中的信息可能已经有所发展或是发生改变。

    0.现在有两个分支 master 和 server

    1.我在 master 分支执行,git rebase server 和 git rebase server master 结果一致,都仅仅只影响到了 master 分支,server 分支无变化,到这里我觉得没什么问题。

    退到 0

    这一次我在 master 分支执行 git rebase master server,server 分支按预期的结果发生了变化,但是我疑惑的是: 为什么 master 分支也发生了跟 server 分支一样的变化?(两个分支变得一模一样了)

    按理说 master 分支不应该什么也不变吗?

    按我的理解 git rebase master server = git checkout server & git rebase master

    其实也就是:在 server 分支 ,git rebase master server = git rebase master

    那么:在 master 分支 git rebase master server = ?,如果还是 = git rebase master

    那么在 master 分支执行完毕后不应该 server 和 master 分支都不发生变化嘛?(相当于 master 分支执行 git rebase master )

    第 1 条附言  ·  2019-12-03 20:04:39 +08:00
    问题关闭!

    不好意思,大伙,我在本地复现了一下,没有出现 2 ( master 和 server 分支变一样的情况)

    一切如 1 的解释,git rebase master server 就是相当于 git checkout server & git rebase master

    这个命令本来就是方便你,在 master 分支的情况下,可以不 checkout 到 server 分支,就可以执行 rebase master 的操作

    我之所以提这个问,是因为开始学 git,然后在 githug 这个游戏,第四十关( rebase )操作的时候,发现了这个情况,我理所当然的认为 githug 里面模拟的 git 环境应该是和本地一致的,就没有在本地验证,查阅了很多文档,也都是如 1 所说那样,所以才迷惑不解。

    现在来看可能是 githug 里面的 git 环境本身就有 bug 或者 git 版本不一导致的。
    ( githug git 版本:git version 1.8.3.1,本机版本:git version 2.21.0.windows.1 )

    (在 githug 四十关(可以用 githug reset rebase 快速定位):在 master 分支执行 git rebase master feature,会导致 master 分支同步 feature 的更改,本地环境下并不能复现这个状况)
    9 条回复    2019-12-04 09:06:05 +08:00
    wangyzj
        1
    wangyzj  
       2019-12-03 19:05:47 +08:00
    master <------ master <------ server
    |_________________________↑
    一种递归的赶脚
    zunceng
        2
    zunceng  
       2019-12-03 19:16:57 +08:00
    git rebase [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>]
    [<upstream> [<branch>]]
    If <branch> is specified, git rebase will perform an automatic git checkout <branch> before doing anything else. Otherwise it remains on the current branch.

    If <upstream> is not specified, the upstream configured in branch.<name>.remote and branch.<name>.merge options will be used (see git-config(1) for details) and
    the --fork-point option is assumed. If you are currently not on any branch or if the current branch does not have a configured upstream, the rebase will abort.

    我读了文档我懂了 你呢
    caneman
        3
    caneman  
    OP
       2019-12-03 19:43:41 +08:00
    这是 git help rebase 里面的文档,已经看过了,我上面 git rebase master server = git checkout server & git rebase master 就是从这里看到的,是我理解错了吗?能否不吝赐教?谢谢~
    zunceng
        4
    zunceng  
       2019-12-03 19:58:36 +08:00
    rebase 的 upstream 都是远程分支 你操作多了弄混了吧
    caneman
        5
    caneman  
    OP
       2019-12-03 20:10:50 +08:00
    @zunceng 他这个写的是 master 和 origin master 是等同的吧?我在 git 手册里面 关于 rebase 的说明里面 看到了 git rebase master server 这种用法,可以在不切换分支的情况下对另一个分支进行 rebase 操作。

    我刚刚本地不能复现,可能是 git 版本的问题,我写题目附录里面了。
    niming007zh
        6
    niming007zh  
       2019-12-03 20:25:47 +08:00
    我跟你讲,git 的 1.6,1.7,1.8.....版本之前都有不少差异,甚至命令都变了。
    遇事不决,升级 git。
    xingheng
        7
    xingheng  
       2019-12-03 21:57:21 +08:00 via iPhone
    从来都是 git rebase branch1 branch2 这种格式,无视操作前当前分支是什么,记住 branch1 会垫底,branch2 会跑上面去就行了
    xingheng
        8
    xingheng  
       2019-12-03 21:57:21 +08:00 via iPhone
    从来都是 git rebase branch1 branch2 这种格式,无视操作前当前分支是什么,记住 branch1 会垫底,branch2 会跑上面去就行了
    caneman
        9
    caneman  
    OP
       2019-12-04 09:06:05 +08:00
    @xingheng 对啊,我遇到的情况是,branch1 会把 branch2 上的修改同步一遍,就是两个分支都变成了 branch1 垫底,branch2 跑上面去
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5730 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:45 · PVG 09:45 · LAX 17:45 · JFK 20:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.