"always" 变基的陷阱是什么?

What are the pitfalls of "always" rebasing?

工作中的一些人发誓 git pull --rebase。事实上,他们不会 git pull 没有它,即使几个人在共享分支上工作。

我的理解是 rewrites history. In fact, I have seen it said that one should never rebase on a public/shared branch

我的问题:

与建议的欺骗可能不同:

我不是在谈论将 master 变基为功能分支。我说的是几个开发人员在同一个功能分支上工作,做一个 git pull --rebase,进行一些更改,推送(如果推送被拒绝,再做一个 pull --rebase),等等

我们在工作流程中使用它。

如果你只在短命的分支上使用它是相对安全的。您正在重播 您的本地 提交(重写 那个 历史记录)在您同事推送的提交之上。

如果您要重新调整整个协作分支的基址,与您的同事仔细协调符合您的最大利益。否则很容易有人失业。 pull -r,很难。

我们在工作流程中使用它。

只要您只 rebase 未推送的更改,您只是在重写自己的历史,这很好。

如我所见:

  • rebase 的优势 - 历史更加清晰,因为它是线性的。您在一个分支上工作的开发人员越多,这种情况就越明显。
  • 变基的缺点 - 没有冲突解决的跟踪。假设一切正常。然后你 fetchmerge 并且有合并冲突。您错误地解决了它们并推送了您的更改。当 CI 系统检测到错误时,您可以将其追溯到不正确的冲突解决(或者可能是冲突解决后不正确的测试)而不是不正确的初始 coding/testing。如果 fetch 然后 rebase,冲突解决方案将丢失,嵌入到您的一个或多个提交中。

我敢肯定人们有很多支持或反对某一方的其他原因,但对我来说归结为这两个是最重要的。

请注意 任何要大喊大叫的人,我完全错过了一些要点。我正在解决变基与合并的微观 "developers doing their day to day commits and feature work" 级工作流程。我不是从宏 "how to handle whole large branches" 级别的工作流中解决这个问题。我相信 micro 是 OP 所询问的。