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

关于 git rebase 的一点疑问

  •  
  •   caneman · 6 天前 · 1223 次点击

    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 条附言  ·  6 天前
    问题关闭!

    不好意思,大伙,我在本地复现了一下,没有出现 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
        1
    wangyzj   6 天前
    master <------ master <------ server
    |_________________________↑
    一种递归的赶脚
        2
    zunceng   6 天前
    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.

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

    我刚刚本地不能复现,可能是 git 版本的问题,我写题目附录里面了。
        6
    niming007zh   6 天前
    我跟你讲,git 的 1.6,1.7,1.8.....版本之前都有不少差异,甚至命令都变了。
    遇事不决,升级 git。
        7
    xingheng   6 天前 via iPhone
    从来都是 git rebase branch1 branch2 这种格式,无视操作前当前分支是什么,记住 branch1 会垫底,branch2 会跑上面去就行了
        8
    xingheng   6 天前 via iPhone
    从来都是 git rebase branch1 branch2 这种格式,无视操作前当前分支是什么,记住 branch1 会垫底,branch2 会跑上面去就行了
        9
    caneman   6 天前
    @xingheng 对啊,我遇到的情况是,branch1 会把 branch2 上的修改同步一遍,就是两个分支都变成了 branch1 垫底,branch2 跑上面去
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4460 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 01:52 · PVG 09:52 · LAX 17:52 · JFK 20:52
    ♥ Do have faith in what you're doing.