Py学习  »  Git

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

Tim • 4 年前 • 1081 次点击  

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

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

 $ git rebase --onto master maint^ feature

enter image description here

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

git rebase --onto master maint feature

?

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/44015
 
1081 次点击  
文章 [ 2 ]  |  最新文章 4 年前
Prasheel
Reply   •   1 楼
Prasheel    5 年前

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。

torek
Reply   •   2 楼
torek    5 年前

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

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

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 . 据推测,作者不愿意强迫读者在读者的头脑中多走一步。