我们有一个分支(让我们说分支A
)我们想要合并到master
进行一些修改,还有一些我们想要合并的修改,但是想留待以后使用。我们没有修改/拆分提交,只是手动修改代码。
因此我们从分支B
创建了一个新分支(分支A
),以将整个代码保存在当前状态,包括我们稍后想要合并的修改。在现有分支(分支A
)中,我们手动修改代码以删除我们现在不想合并的部分。
然后我们将分支A
合并到master。问题是,如果我们现在尝试合并分支B
,git merge表示一切都是最新的。我想这是因为B
与B
和master
的共同祖先(即分支A
在删除部分代码之前)没有具体区别,与分支B
相同。例如,git diff master...B
显示没有差异。但存在实际差异。
我知道我们没有遵循最佳做法。我们应该创建一个新分支来修改历史记录。或者我们应该删除新分支B
中的部分代码,而不是原始分支A
。
但是有没有办法告诉git改变它的合并策略,以便它实际上选择分支B
中的差异?
答案 0 :(得分:0)
我认为没有办法以这种方式更改合并策略,因为更改的历史记录与合并相关。这不仅仅是比较两个独立的文件,而是关于应用更改。
由于B
是A
的管理员,因此在合并A
之后,B
上的所有更改都合并为主。
如果旧状态的冗余和合并将撤消更新的更改,整个 合并概念会变得非常......很奇怪。
您实际想要做的不是更改的合并(因为所有 已合并),但还原的某些更改已经合并了。
为此,您可以在git revert <sha>
分支上使用master
,<sha>
您可以指定要恢复的提交。
git revert <sha>
创建一个新的提交,完全执行指定提交的反转。
<强>原始强>
master <- HEAD
|
1----------5
`-2--3--4´
| |
B A
git revert 4
master <- HEAD
|
1----------5--6
`-2--3--4´ `revert A
| |
B A
如果您在B
之后进行了多次提交,则可以指定范围:
git revert B..A
,它将为每个原始提交创建单独的恢复提交,或使用
git revert --no-commit B..A
git commit -m"Revert everything at once"
为所有还原的更改创建一个单一的还原提交。