当您将git merge和rebase结合起来时会发生什么?

当您将git merge和rebase结合起来时会发生什么?,git,merge,rebase,Git,Merge,Rebase,反对git rebase的一个论点是,这是一个比合并更复杂的过程,如果多个开发人员共享一个功能分支,中游rebase意味着所有其他开发人员都必须删除其本地分支,并从中央存储库获取一个新副本(或者开始使用不同的分支) 在多个开发人员共享一个分支的场景中,git merge是一个更简单的工作流。但是,当功能完成时,最终合并到“主”如何?如果您一直在使用“合并”而不是使用“重基”来与master保持同步,但在最终交付给“master”时,您使用交互式“重基”来实现干净、线性的历史记录并挤压无趣的提交,

反对git rebase的一个论点是,这是一个比合并更复杂的过程,如果多个开发人员共享一个功能分支,中游rebase意味着所有其他开发人员都必须删除其本地分支,并从中央存储库获取一个新副本(或者开始使用不同的分支)


在多个开发人员共享一个分支的场景中,git merge是一个更简单的工作流。但是,当功能完成时,最终合并到“主”如何?如果您一直在使用“合并”而不是使用“重基”来与master保持同步,但在最终交付给“master”时,您使用交互式“重基”来实现干净、线性的历史记录并挤压无趣的提交,会发生什么?特别是,当“合并”提交被重放时会发生什么,或者git是如何处理的?

只有当您最终强制推送时,重新基础才是一个问题,但如果您这样做,任何操作都是一个问题。在以目标分支的重基结束的场景中,git处理得非常好,只需重放合并,如果同一个合并发生冲突,则可能会发生冲突。对于大多数情况,只有当相应的合并也会有问题时,重新基础才会有问题。

重新基础只有在强制推送结束时才有问题,但如果这样做,任何操作都会有问题。在以目标分支的重基结束的场景中,git处理得非常好,只需重放合并,如果同一个合并发生冲突,则可能会发生冲突。对于大多数情况,只有当相应的合并也会有问题时,重基才会有问题。

通常,您希望避免对通过推送而公开的任何提交进行重基。在您的情况下,您可以不受影响,因为您正在对一个临时特性分支进行重定基址,并且您可以非常清楚地与您的团队(即在该分支上工作的团队)沟通,一旦开发结束,并且这些更改已重定基址到您的主功能中,该分支基本上就消失了


除此之外,对包含合并的分支重新设置基址实际上没有问题。主节点的合并提交将从重定基础的分支中消失(因为现在您已经重定基础,这些更改已经集成),并且您可以轻松地在以后运行交互式合并以进一步清理历史记录。

通常,您希望避免重定已通过推送公开的任何提交。在您的情况下,您可以不受影响,因为您正在对一个临时特性分支进行重定基址,并且您可以非常清楚地与您的团队(即在该分支上工作的团队)沟通,一旦开发结束,并且这些更改已重定基址到您的主功能中,该分支基本上就消失了


除此之外,对包含合并的分支重新设置基址实际上没有问题。主节点的合并提交将从您的重定基础分支中消失(因为现在您已经重定基础,这些更改已经集成),之后,您可以轻松地运行交互式合并,以进一步清理历史记录。

我遇到的论点是,很难让所有其他团队成员都参与到重新基础中来。我不确定这是否真的是个问题。他们需要能够理解和处理远程分支突然与本地分支分离的情况。是的,只有在分支真正处于生命末期(由于合并到master或重新设置到master)时,您才会这样做。因此,理想情况下,在重基之后,您将推送主分支,并删除远程要素分支。这样,对于其他成员来说,除了普遍的困惑之外,不应该存在真正的问题,这就是为什么您应该传达此工作流的原因。除此之外,他们的本地分支(不是重基和过时的分支)不会崩溃,而只是变得过时。我遇到的论点是,很难让所有其他团队成员都支持重基。我不确定这是否真的是个问题。他们需要能够理解和处理远程分支突然与本地分支分离的情况。是的,只有在分支真正处于生命末期(由于合并到master或重新设置到master)时,您才会这样做。因此,理想情况下,在重基之后,您将推送主分支,并删除远程要素分支。这样,对于其他成员来说,除了普遍的困惑之外,不应该存在真正的问题,这就是为什么您应该传达此工作流的原因。除此之外,他们的本地分支(不是重定基础和过时的分支)不会崩溃,而只是变得过时。