将 Git 提交从一个分支应用到另一个完全不相关的分支

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

所以我对 Git 比较陌生,我正在努力解决一些概念以及应该应用哪些概念才能实现我想要的目标状态。 我还使用 Visual Studio Code 和 Git 源代码管理扩展进行开发。

我正在开发的源代码(Marlin 固件)可以在线下载,但需要针对我的应用程序进行一些特定的调整。 我首先从 Github 下载他们的 v2.1.2.1 代码,然后在 Visual Studio Code 中创建本地存储库和分支。 我决定将我的本地分支命名为“master-2.1.2.1”。 然后,我从“master-2.1.2.1”创建了一个名为“DEBUG-2.1.2.1”的新分支,然后我在其中根据我的需求进行了一些提交。 一旦我有了一个可用的 DEBUG 版本,我就从“DEBUG-2.1.2.1”创建了一个名为“V1-2.1.2.1”的新分支。 然后,我切换到“V1-2.1.2.1”,并针对我需要进行的调整进行了另一次提交,以满足我的需求。

然后,我将本地存储库和分支推送到我自己的 Github 帐户以进行备份。

然后 Marlin v2.1.2.2 发布了。 我从 Github 下载了 v2.1.2.2 的源代码,并创建了一个名为“master-2.1.2.2”的新本地分支(与我之前的任何分支无关)并签入了所有分支 将 v2.1.2.2 的新源代码添加到该新分支中。 然后,我从“master-2.1.2.2”创建了一个名为“WIP-2.1.2.2”的新本地分支 现在,我正在尝试弄清楚如何以智能的方式应用所有特定的调整/提交,从“v1-2.1.2.1”到“v1-2.1.2.2”,而不必尝试并记住我所有的非常具体的更改在开发 v2.1.2.1 时制作。

我不知道这是否是 Git rebase 的完美用例。 请记住,在我的存储库中,分支“V1-2.1.2.1”和“V1-2.1.2.2”是不相关的。它们本质上是两个完全不相关的分支。

为了帮助澄清问题,让我尝试如下说明:

分支 #1 流程 ----> 'master-2.1.2.1' -> 'DEBUG-2.1.2.1' -> 'v1-2.1.2.1' BRANCH #2 FLOW ----> 'master-2.1.2.2' -> 'v1-2.1.2.2' -> [应用来自(不相关)BRANCH #1 FLOW 的所有提交] -> 创建我专门调整的 'v1- 2.1.2.2'.

我希望以上是有道理的。 我应该以不同的方式解决这个问题吗?

我尝试在 Visual Studio Code 中使用 Gitcherry pick 和 Git rebase,但它似乎没有按我的预期工作。当我查看“V1-2.1.2.2”源代码树中的源代码文件时,我希望看到应用的特定调整,但没有应用任何更改,所以也许我做错了什么,或者我没有正确使用它,或者也许我需要通过命令行执行此操作,或者可从 Visual Studio Code 市场安装的 Git 源代码扩展可能存在错误。

我很高兴为每个提交进行 3 路交互式合并,只是为了确保每个提交的最新具体调整都应用于“V1-2.1.2.2”源代码树,但我正在努力了解如何正确地做到这一点。然后我迷失在 Google 和 YouTube 的兔子洞中,这就是为什么我认为最好来这里询问 Stack Overflow 社区针对我的用例我应该做什么。

任何帮助将不胜感激!

谢谢, 马丁

git version-control git-merge git-rebase
1个回答
0
投票

所以....就你的观点而言:如果你要进行变基,git 并不关心分支在你的存储库中不相关这一事实。

因此,我假设您在

master-2.1.2.1
中所做的第一个提交是来自上游版本 2.1.2.1 的代码
as is
,而分支
master-2.1.2.2
中的第一个提交是来自上游的 2.1.2.2 代码。 ...然后,
master-2.1.2.1
中的第一个提交将被称为
X
(使用第一个提交的提交ID)......所以......你可以这样做:

git branch -f WIP-2.1.2.2 V1-2.1.2.1 # place the WIP on top of the branch that has all the stuff we want to rebase
git rebase X WIP-2.1.2.2 --onto master-2.1.2.2

运行之后,您最终将获得

WIP-2.1.2.2
V1-2.1.2.1
中所做的所有调整,超过原始提交
X
,但应用在
master-2.1.2.2
之上。

解决了这个问题后,我想问一下为什么你要从头开始一个新的仓库。您应该克隆(甚至是本地)upstream 存储库并从上游分支或标签创建分支。

© www.soinside.com 2019 - 2024. All rights reserved.