Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git:在第二个分支合并后,将第三个分支重新设置为第一个分支的更好方法_Git_Github_Rebase - Fatal编程技术网

Git:在第二个分支合并后,将第三个分支重新设置为第一个分支的更好方法

Git:在第二个分支合并后,将第三个分支重新设置为第一个分支的更好方法,git,github,rebase,Git,Github,Rebase,我有一个分支,它有一个很大的特性,我们可以称之为a,我从a的最后一次提交创建了一个分支B 过了一段时间,我在Github中创建了一个Pull请求,以将B合并到a上。但因为我不想等待,所以在合并B之前,我从B创建了一个分支C [A] a---b---c---c1---c2 \(A) [B] d---e---f \(B) [C] g---h 我在C上提交,同时分支B已合并

我有一个分支,它有一个很大的特性,我们可以称之为a,我从a的最后一次提交创建了一个分支B

过了一段时间,我在Github中创建了一个Pull请求,以将B合并到a上。但因为我不想等待,所以在合并B之前,我从B创建了一个分支C

[A] a---b---c---c1---c2
            \(A)
[B]           d---e---f
                      \(B)
[C]                     g---h
我在C上提交,同时分支B已合并到A上。因此,我希望清理我的工作,并通过从源代码中提取来更新我的本地A,这样我就可以有这种情况:

[A] a---b---c---c1---c2---d---e---f
                                  \(A)
[C]                                 g---h
现在,我的问题是:我想将C重设为A的基础,但由于B已被合并和删除(即使是在本地,因为我拉了),所以为了重设基础,我不能执行以下操作:

git rebase B C --onto A
但是B已经不存在了,所以当我记录git日志时,这基本上就是我所拥有的:

[A]a---b---c---c1---c2

[C] d'---e'---f'---g---h


(This is what I have to do in order to rebase)

git rebase f' C --onto A

这是可行的,但我需要验证来自B的最后一次提交的哈希,我可以从C猜到(这里是f'),我可能会在这里出错(这看起来很难看,好像来自B的所有提交都一直处于打开状态)

在B合并后,有没有更好的方法将C重设为a?也许我得在拉车之前做点什么


如果这还不够清楚,请让我知道(我在这里不经常问问题!:)

根据您给出的确切的第一个分支图,您只需要在A分支上重新设置C分支的基础:

# from C branch
git rebase A
这将在A分支上以commit
c2
结尾的新基上通过
h
重播提交
d
。请注意,我将实际绘制生成的重基C分支,如下所示:

C: a -- b -- c -- c1 -- c2 -- d' -- e' -- f' -- g' -- h'
素数标记(即
d'
而不是
d
)表示提交的
d'
h'
实际上已被重写。请注意,在重新基址期间重放提交意味着再次进行提交,实际上是新的提交

关于要将重定基址的
C
合并回
A
时会发生什么情况,让我们这样绘制图表:

A: a -- b -- c -- c1 -- c2
                          \
C:                         d' -- e' -- f' -- g' -- h'
在对
A
上的
C
重定基址后,前一个分支现在完全领先于后一个
A
分支。这意味着,如果要将
C
合并回
A
,您只需通过直接在
A

上应用提交
d'
,尽管
f'
感谢您(非常)快速的回答,就可以快速推进
A
分支!在这种情况下,当我认为C已完成时,当我想将C合并到A时,会发生什么情况,所有这些提交都从<代码> d′/COD> > <代码> h ' /代码>?A只需要A到h,没有问题吗?