使git在不覆盖现有代码的情况下进行更改
分支A是主要的开发分支。 分支B包含我们需要保留的更改,但我们希望通过应用于A的错误修复来维护B 所以问题是:我们如何告诉git接受A中的更改,而不使用A的代码覆盖B中的所有内容使git在不覆盖现有代码的情况下进行更改,git,merge,rebase,Git,Merge,Rebase,分支A是主要的开发分支。 分支B包含我们需要保留的更改,但我们希望通过应用于A的错误修复来维护B 所以问题是:我们如何告诉git接受A中的更改,而不使用A的代码覆盖B中的所有内容 我们尝试了各种合并策略以及重新定基,但都没有成功。要么B被A完全覆盖,要么A根本不做任何更改。1-在A的提交历史记录中找到开始的点:“A继续” 2-将头部复位到该点 3-从该点创建新分支(我们称之为C) 4-将A的头部复位到原来的位置 5-将B合并到C中(现在C是一个基于A的“升级B”) 6-将C合并到A中1-在A的提
我们尝试了各种合并策略以及重新定基,但都没有成功。要么B被A完全覆盖,要么A根本不做任何更改。1-在A的提交历史记录中找到开始的点:“A继续” 2-将头部复位到该点 3-从该点创建新分支(我们称之为C) 4-将A的头部复位到原来的位置 5-将B合并到C中(现在C是一个基于A的“升级B”)
6-将C合并到A中1-在A的提交历史记录中找到开始的点:“A前进” 2-将头部复位到该点 3-从该点创建新分支(我们称之为C) 4-将A的头部复位到原来的位置 5-将B合并到C中(现在C是一个基于A的“升级B”)
6-将C合并为A以下是我从您的情况中了解到的:
"then on"
v
*--*--*--*--*--x--*--*--*--a <- A
\
-*--*--*--b <- B
- 在分支
上创建一个合并提交,它不会更改B
,但会向git指示应该忽略B
之前的所有更改x
B
合并A
:
git merge A
只有“then on”的更改才会包括在内。以下是我从您的情况中了解到的:
"then on"
v
*--*--*--*--*--x--*--*--*--a <- A
\
-*--*--*--b <- B
- 在分支
上创建一个合并提交,它不会更改B
,但会向git指示应该忽略B
之前的所有更改x
B
合并A
:
git merge A
只有“then on”的更改才会被包括在内。您所描述的理想结果,我将其重新表述为合并工作或合并更改,这就是git merge所做的。不过有一个关键的考虑因素:我们必须找出“从何时开始”的部分,因为Git不存储更改,而是存储整个快照。因此,您的问题缺少的是Git将在您的两次提交的合并基提交中找到的信息。您能否详细介绍失败的“各种合并策略”?(他们是如何失败的)?在A上重定B的位置应该可以。我喜欢LeGEC的回答,如果他正确理解了你的情况,但有一个更简单的方法可以考虑:如果你想从a修复bug,而不是从a修复特性,cherry将错误修复从A提交到B对您来说是一种更好的方法吗?您所描述的理想结果,我将重新表述为组合工作或组合更改,这就是git merge所做的。不过有一个关键的考虑因素:我们必须找出“从何时开始”的部分,因为Git不存储更改,而是存储整个快照。因此,您的问题缺少的是Git将在您的两次提交的合并基提交中找到的信息。您能否详细介绍失败的“各种合并策略”?(他们是如何失败的)?在A上重定B的位置应该可以。也合并。我喜欢LeGEC的回答,如果他正确理解了你的情况,但有一个更简单的方法可以考虑:如果你想从a中修复bug,而不是从a中修复特性,那么cherry从a中选择bug修复提交到B中对你来说是更好的方法吗?如果a中的特性永远不会合并到B中,这应该是一个好方法。但是,如果在未来的开发周期中,您希望对a和B进行全功能合并,我认为Git将永远忽略原始合并基础和“then on”之间的提交;事实上,从我的理解来看,这就是OP所要求的(尽管我的理解可能是错误的:))是的,这可能是我们的问题。最后,我们只是手动将文件树复制到一个全新的分支中。这是一个可怕的黑客围绕git,但它的工作!如果a中的功能永远不会合并到B中,那么这应该是一个好方法。但是,如果在开发周期的未来某个时候,您希望对a和B进行完整的功能合并,我认为Git将永远忽略原始合并基础和“then on”之间的提交;事实上,从我的理解来看,这就是OP所要求的(尽管我的理解可能是错误的:))是的,这可能是我们的问题。最后,我们只是手动将文件树复制到一个全新的分支中。这是一个可怕的黑客围绕git,但它的工作!