代码之家  ›  专栏  ›  技术社区  ›  Tim unnamed eng

我该如何理解这个git回扣——举个例子?

git
  •  1
  • Tim unnamed eng  · 技术社区  · 7 年前

    使用git的版本控制 举个例子

    要将功能分支上的p和q提交从maint移植到master分支,请发出以下命令:

     $ git rebase --onto master maint^ feature
    

    enter image description here

    下面的命令是否也给出相同的结果

    git rebase --onto master maint feature
    

    ?

    这本书为什么用 maint^ 而不是 maint ?

    2 回复  |  直到 6 年前
        1
  •  1
  •   torek    7 年前

    由于时间不够,我在这里只给出一个简短的回答:

    下面的命令是否也给出相同的结果

    git rebase --onto master maint feature
    

    ?

    对于这个特殊的图形 是的。对于(某些)其他图形,不(当然,对于其他图形,它们可能建议使用其他命令)。

    这本书为什么用 maint^ 而不是 maint ?

    不是作者,我只能猜测。这种特殊形式的 git rebase 匹配中的第一个语法 the SYNOPSIS section of the git rebase documentation :

     git rebase [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>]
             [<upstream> [<branch>]]
    

    在这里,他们设置 newbase = master , upstream = 维特 branch = feature . 所以这将从 git checkout feature ,然后将枚举 maint^..HEAD 寻找复制的候选人。如果您查看您的图表,您将看到这正是提交 P Q :开始于 Q ,返回 ,从那里走到 Y Y 维特 .

    使用 git rebase --onto master maint feature ,git将从 Q ,返回 ,返回 Y ,仍然停止,因为 维恩特 识别 Z 然后从 Z 把我们带到 Y 。但这需要一个额外的步骤 Z . 据推测,作者不愿意强迫读者在读者的头脑中多走一步。

        2
  •  -1
  •   Prasheel    7 年前

    git rebase的三元形式 假设有一个分支topica在某个点上与master分离:

    A--B--C--D--E主机

     F--G--H topicA
    

    假设还有其他人从topica分支创建了topicb,并添加了更多提交:

    A--B--C--D--E主机

     F--G--H topicA
    
             I--J--K--L--M topicB
    

    这是我遇到的一个真实案例的一个例子,topica只有几个非常大的提交,这些提交很难消化,可能会被拆分成许多较小的提交。TopICB是作为对TopICA所做工作的延续而创建的。

    我查看了我自己的本地topica副本,通过大量的交互回扣和git add-e的大量使用,我能够将topica拆分成更小的提交,使topicc:

    A--B--C--D--E主机 γ | F--G--H托皮卡 γ |我——J——K——L——我是托皮克 γ N--O--P--Q--R--S--T--U--V--W拓扑

    我和制作托皮卡的人谈过了,我们同意由我的托皮卡分公司代替托皮卡。但对于在topicb上所做的工作该怎么办呢?

    我们想做的操作是:让topicc成为topicb的新基地,在topicb与topica分离的地方切割它,看起来像:

    A--B--C--D--E主机 γ | F--G--H托皮卡 γ |我——J——K——L——我是托皮克

     N--O--P--Q--R--S--T--U--V--W--I'--J'--K'--L'--M' topicC
    

    topicb的五个承诺(i到m)在topicc之上播放,从topicb与topica分离的地方开始,创建i、j、k、l和m。

    执行此操作的命令是:

    git rebase --onto topicC topicA topicB
    

    其中topicc是新基地,topica是旧基地,topicb是topicc负责人的参考。

    所以你的答案是,是的,它可以不用^ ^

    ^的意义是:

    head是指当前分支尖端的第一个父级。

    请记住,Git提交可以有多个父级。{头}是对π头^ 1的短,并且您也可以适当地对“x”头“2”等进行处理。

    你可以得到任何承诺的父母,而不是正义。你也可以通过一代又一代地移动:例如,Master ~2意味着主分支尖端的祖父母,在歧义的情况下倾向于第一亲本。这些说明符可以任意链接,例如,主题~ 3 ^ 2。