TL;博士; 我想要一种方法告诉 git“master 有一个新版本,看起来与功能 A 的尖端完全相同,但没有历史记录”。
有没有办法做到这一点?
[更新:我现在有一个最小化这个问题的工作流程,但我仍然想知道如何告诉 git 执行以下操作:-
提交对分支 X 的单个更改,以使所有文件和文件夹与分支 Y 尖端的文件和文件夹匹配。这可能吗?]
背后的故事
我们通常避免从功能分支分支......但在这种情况下必须这样做。这是我们尝试做的:-
master o-----------------o---------------o
\ /[squash] /
feature A o-o-o-o-o-o-o-o / [squash] -- too many conflicts
\ /
feature B o-o-o-o-------------o
由于各种原因,我们总是挤到主人身上。但是由于特性 B 与特性 A 有很多共同的变化,第二个 squish 有很多合并冲突。
我试过这个...
master o-----------------o----------------o
\ /[squash] / [squash] -- same set of conflicts!!
feature A o-o-o-o-o-o-o-o----------------o
\ / (merge) -- easy
feature B o-o-o-o--------------o
(合并)很容易,并且功能 A 与我希望 master 拥有的文件集完全相同(因为功能 A 和 master 在合并到 master 后具有相同的文件)。这种合并很容易,因为 Git 知道只有在功能 B 分支后才需要解决冲突。
那时我想将现在合并的功能 A 分支提交给 master。但是我遇到了我试图避免的同样的冲突。
功能 A 具有我想要的所有更改...所以我可以检查主和功能 A 并将所有文件复制到主控中,然后提交。事实上这就是我最终做的......但肯定有办法用 git 做到这一点?!?
我尝试从master到feature A生成一个二进制补丁,然后应用它。
git diff --binary master featureA > patch
git apply patch
这因“补丁不适用”错误而失败。
我尝试了其他各种合并尝试……所有这些都导致我不得不解决我已经重新解决的所有相同的合并冲突。
合并是从功能 B 到主控的痛苦的原因是,在功能 B 分支之前功能 A 中更改的文件在提交之前由功能 A 进一步更改。这意味着 Git 将这些文件视为功能 B 中的更改,但它们与功能 A 中提交的文件不同,因此需要合并。
在提交之前在 master 上重新设置功能 B 意味着您必须再次执行您未触及的文件的合并。