Git 合并分支的交互式重基

Git 合并分支的交互式重基,git,git-rebase,Git,Git Rebase,我正在使用git,并且我正在进入以下状态: X --- Y --------- M1 -------- M2 (my-feature) / / / / / / a --- b --- c --- d --- e --- f (stable) 当我们在“我的功能”分支上工作超过一天时,就会发生这种情况。 M1和M2从稳定分支合并到特征分支。M1和M2可能合并

我正在使用git,并且我正在进入以下状态:

      X --- Y --------- M1 -------- M2 (my-feature)
     /                 /           /
    /                 /           /
   a --- b --- c --- d --- e --- f (stable)
当我们在“我的功能”分支上工作超过一天时,就会发生这种情况。 M1和M2从稳定分支合并到特征分支。M1和M2可能合并了已解决的冲突。 将稳定分支合并到特征分支的整个想法是尽早处理冲突

功能完成后,我们希望将功能分支重新设置为一个或两个提交

问题是,当我们进行交互式重基git时,它会向我们展示我们在M1和M2合并期间已经解决的合并冲突


有没有办法让git重用我们在M1和M2中已经做过的合并决策?

您可以使用-f标志强制它

git rebase --interactive --preserve-merges git rebase--交互式--保留合并
如果合并冲突是相同的,那么这是git中最有用(尽管鲜为人知)的命令之一
git-rere
的完美用例。从手册页:

在使用相对较长的主题分支的工作流中,开发人员有时需要反复解决相同的冲突,直到 主题分支完成(要么合并到“发布”分支,要么发送并接受上游)

此命令通过在初始手册上记录冲突的自动合并结果和相应的手动解决结果来帮助开发人员完成此过程 合并,并将以前记录的手分辨率应用于相应的自动合并结果

git-reere
保留冲突解决方案的记录,并在
git-merge
git-rebase
git-commit
(提交合并时)中遇到相同冲突时自动应用这些冲突解决方案。斯科特·查孔和

通过发出以下命令,可以在
merge
rebase
中启用
git-reere

git config --global rerere.enabled true

如果您希望仅为单个存储库启用此选项,请删除
--global
标志。

通过单个提交将功能分支
功能
转换为新分支
功能一次提交
的明确方法:

git checkout -b feature-one-commit \
"$(git commit-tree HEAD^{tree} -m "Commit message" -p master)"    

我已经尝试过保存合并,但我的错误似乎是我将合并提交标记为挤压。现在我又做了一次,只在M2之后标记commit,以防挤压。在重基上注意标记的组合。它可能会产生违反直觉的结果:是的,我已经读到了一起使用-I和-p可能是危险的。我从不重新排序提交,只选择要拾取和挤压的内容。我注意到,如果我在合并后立即挤压提交,它将重新创建合并的提交并“笔直”提交行历史是否有一种方法可以在保留合并的同时编辑旧的提交?我认为这不能解决OP的问题,而且我不能确定,因为没有解释。谢谢。我读过关于Reere的文章,但它直到现在才使用它。实际上,我有一个问题:我们在一个团队中工作,当其他人进行合并冲突时,rr缓存目录将在他们的机器上。它是否将副本复制到主存储库?或者我可以在团队之间共享rr缓存数据吗?rr缓存不是通过远程共享的,但是如果您通过其他方式在repo之间共享实际的
rr缓存
目录,它应该可以工作。关于将
rr缓存
本身作为符号链接存储库,这里有一个很好的答案:。对我来说,这可能是最简单的解决方案,它也让我意识到了这一点。Git真是一个很深的兔子洞,呵呵。