将一个分支恢复为快进的合并

问题描述 投票:0回答:2

在我的代码库中,我们有两个分支(与此问题有关),我们有

main
TestFlight

当我们要发布时,我们会执行以下操作

$ git checkout main $ git pull $ git checkout TestFlight $ git pull $ git merge main --ff-only $ git push
在执行此操作之前,我在Github上提出了一个拉动请求,以进行

main

TestFlight
之间的更改,然后保持打开状态。运行这些命令后,Github弄清楚了它已合并并关闭PR的合并。我不确定这是否重要。
在我们的最新版本中,我想做一些不同的事情。我有两次主要的投入,我想将其包括在Testflight中。但是,我不希望其他任何其他提交。

我所做的是樱桃挑选了这两个委托,然后推动了。这在我想要的Xcode Cloud中启动了构建。

之后是问题。我尝试遵循打开拉动请求的正常步骤,然后运行这些步骤。但是,当我试图进行合并时,抱怨说

fatal: Not possible to fast-forward, aborting.

我在假设,因为没有线性路径可以在两个分支之间获得。

因此,我检查了Visual Git客户端中的分支。我注意到的是,此过程导致测试范围的分支具有所有的投入看起来像“属于” testflight分支,而不是在分支中合并时通常看起来的样子。因此,我挑选了剩下的每一个在

main

中剩下的奉献,然后推动。
在这一点上,分支匹配。尽管两个分支机构的顺序不同。
现在,我显然已经处于某种不同的状态,因为当我尝试查看Github中的Main和testflight之间的变化以打开该拉的请求时,Github列出了所有提交,因为我开始做任何樱桃 - 选择 我很困惑为什么是这种情况。我意识到这些提交的顺序不同,但是对我的视觉git客户端,分支看起来完全像我期望的那样减去它们的顺序。

我尝试修复(樱桃挑选每个人手动提交)如何无效?我该如何重新恢复稳定状态,以便下次我们要部署时我们可以遵循正常的过程?

	
快速向前合并从A到B,需要B中的委托具有完全相同的哈希(即,它们都需要具有完全相同的历史,元数据和内容)。通过采摘樱桃,您本质上在testflight分支中创建了新的提交,但您无法从Main到Testflight。
要解决这个问题,您需要确保测试飞行中的所有提交都属于主要历史。您可以通过合并从测试飞行到main的合并来做到这一点。

TestFlight

该基本上与Testflight和您以前的主体的历史相同,创建了一个新的合并提交。 您可能需要/需要创建拉动请求才能这样做。

这样做之后,您应该能够按照自己的意愿再次从主要到测试飞行。

注意,如果您想要线性历史记录,这将不起作用。在这种情况下,您需要重置测试飞行,以凝视Main和Force-Push.

问题
git github git-merge fast-forward
2个回答
0
投票
提交时,您不是从分支到另一个分支的提交,而是将其重写为具有相同更改的新事物,而是不同的SHA。这意味着,如果您在分支上有一个commit

git checkout TestFlight git pull git checkout main git pull git merge TestFlight git push

带有id

A

,然后将其樱桃挑选到分支
main
中,您基本上会带有commit

xyz

,它带来了相同的一组更改的

TestFlight

,但这是用不同的ID

A'


0
投票

abc

... -- C -- B -- A main \ -- A' TestFlight 是不同的提交,即使它们代表相同的修改,也不足以使Git执行快速前进的合并。仅当一个分支是另一个分支的子集时,才能发生一个快速的合并,这意味着一个分支包含另一个分支相同的提交历史记录(使用相同的ID)加上其他提交。这就是为什么合并被称为快进的原因,因为目标分支的参考只是将其转发到另一个分支的提交(一个前方的一个)。 在这种情况下,

A
在Main处于commit
A'
TestFlight
快速合并后,分支的ref只是向前移动,指向同样的提交。
C
solution
在您的案件中,您可以将自己带到一个可以通过以下方式快速前进的情况:

重新介绍您实际感兴趣的第二个樱桃采摘的犯罪。

Merge
A
toter take take takeration thratgution
仅保留... -- C -- B -- A | | TestFlight main 的版本,同时将两个分支标记为合并。

最终将力推向遥控器。
,假设
TestFlight

main
是最初被挑选的两个提交的ID,您可以执行:

... -- C -- B -- A | main TestFlight

    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.