Git 会不会合并--挤压导致与已在开发中的樱桃采摘冲突

Git 会不会合并--挤压导致与已在开发中的樱桃采摘冲突,git,Git,我们正在使用git流模型,通过pull请求将特性分支合并到develop分支中,在它们被重新设置为develop之后 有时一个特征分支从另一个特征分支中挑选,其中一个将首先合并到develop中。当第二个重新定位到develope时,这些樱桃选择是快进的 我的问题是:目前我们只使用merge(可以很容易地替换为--ff,我假设我们总是重新设置基址),但我们是否也可以使用o--squash--ff?当这些提交已经存在时,当樱桃挑选的提交重新基于develop时,会不会导致冲突 我担心会出现额外冲突

我们正在使用git流模型,通过pull请求将特性分支合并到develop分支中,在它们被重新设置为develop之后

有时一个特征分支从另一个特征分支中挑选,其中一个将首先合并到develop中。当第二个重新定位到develope时,这些樱桃选择是快进的

我的问题是:目前我们只使用merge(可以很容易地替换为--ff,我假设我们总是重新设置基址),但我们是否也可以使用o--squash--ff?当这些提交已经存在时,当樱桃挑选的提交重新基于develop时,会不会导致冲突

我担心会出现额外冲突的原因如下:假设commit1和commit2都在一个文件中进行更改。如果它们合并到develope中,然后cherry挑选它们的第二个分支进行了一次重基,那么它将认识到这两个提交已经存在

如果这两个提交被挤压,并且它试图在其上重新设置基址,那么它将不再看到这一点,并且在重新设置基址上重放第一个提交时,基址上已经包含了commit2,从而导致冲突

feat1: ... A -- B 
feat2  ... A (cherry picked) -- B (cherry picked)
feat1与squash合并为develop

develop .... S

如果a和B都编辑同一个文件,将feat2重定到develop上会导致冲突吗?

绝对挤压提交会阻碍补丁ID检测,因此重定基础无法再保护您免受由提交引起的冲突。(相反,如果提交序列进行了更改并恢复了更改,那么可以通过挤压消除潜在的冲突,但这更像是一种旁白。)

这难道不会使合并挤压时无法进行樱桃拾取,除非在重新基化特征分支之前,它本身也会挤压吗?不可能?不,更难吗?对挤压“另一边”没有帮助,因为您仍然会得到两个提交(a)不会生成完全相同的补丁,但(b)会影响某些文件的相同行。在樱桃采摘后,rebase可以防止冲突的唯一方法是,如果樱桃采摘前和樱桃采摘后的提交保持“未取消”,我应该指出,rebase确实内置了一些额外的魔法,可以自动解决樱桃采摘后产生的一些冲突,即使在挤压之后。你失去的是“第一道防线”:当双方都有一个转换为完全相同补丁的承诺时,你可以确定由此产生的冲突将被避免,有没有办法找到更多细节,它仍然能够解决哪些冲突?除了研究源代码,我不确定是否有一个全面的文档。我所观察到的是,如果文件Y的change hunk X在cherry pick中更改了,但在其他地方没有更改(在正在重定基址的提交中没有进一步更改,在重定基址的分支中也没有在重定基址后更改),那么重定基址有可能会自动解决它