使用 rebase vs merge 与 master 同步功能

Syncing feature with master using rebase vs merge

根据 Atlassian 的 merge strategy, it is best to merge feature branches 使用 --no-ff 选项返回 master。这在 master 上保留了干净的 git 历史记录,使您可以轻松查看合并中完成的工作。考虑到这一点,当我将 master 合并到我的功能分支时,使用 rebase 还是 merge 有什么关系


git merge

通常,我会在处理 master 时将其合并到我的功能分支中。这实质上是拍摄 master 的快照并将这些更改放入我的分支。 (注意,我不担心将功能合并回母版,这里的重点是保持功能与母版同步的工作流程)


git rebase

将 master 变基到功能分支中更加清晰,并添加了我在 master 头部顶部的功能分支中所做的更改。


在这种情况下,变基与合并如何影响...

  1. master 同步到 feature 的过程?
  2. git 在分支机构工作时的历史?
  3. git分支与master合并删除后的历史?
  1. 使用变基,您正在重写历史,因此您必须强制推送您的功能分支。如果您正在与其他人一起工作,请参阅 (2)。

  2. 每次 运行 变基,实际上是在 重写 该分支的历史。如果它是你自己的分支并且没有人与你合作,这并不可怕,但如果多个开发人员为同一个分支做出贡献,它可能会成为问题——特别是因为如果你重写了历史,他们的提交可能不会干净地推送.

  3. Git 没有变基的历史:

    * master
    |\
    | * branch commit 2
    |/|
    * | simultaneous commit on master
    | * branch commit
    |/
    * previous commit on master
    

    与变基比较:

    * master
    |\
    | * branch commit 3
    | * branch commit 2
    | * branch commit
    |/
    * simultaneous commit on master
    * previous commit on master
    

    如您所见,当您对分支进行变基时,历史记录可能会稍微简单一些,因此有些人更喜欢它。


一些额外的颜色:当我决定一个rebase是否合适时,我经常想我是否认为分支已经"published"。 "published" 分支是其他开发人员可能已经完成的工作,并且有理由期望不会更改的分支。 "unpublished" 分支是我用来将我的更改组织到一个或多个提交中的分支,并且尚未与其他开发人员共享。这是我的工作草稿。