GIT 合并 master 到一个分支

mnm*_*nml 83 version-control git merge branch

我一直在一个新分支上开发一个新功能,同时在我的主分支上做了很多更改。

是否可以将 master 分支合并到我的新分支中以使其保持最新状态,以便在新功能完成后我不会有太多合并冲突?

Chr*_*röm 105

您可以git merge mastergit rebase master

如果分支尚未分发给其他人,在这种情况下,我更喜欢git rebase

因为git rebase使它好像功能分支上的更改是在主分支上的更改之上进行的,这使得版本图更简单。

变基

git rebase 手册中的示例为例,git rebase master在分支中feature

      A---B---C feature                             A'--B'--C' feature
     /                   --rebase-->               /
D---E---F---G master                  D---E---F---G master
Run Code Online (Sandbox Code Playgroud)

但是,git rebase仅适用于分支尚未分发时,否则下游会出现混乱和额外工作,因为旧提交 A、B、C 现在被新提交 A'、B'、C' 和 F 替换和以前不存在的G。

git rebase master在分支之后的实际结果feature是这样的:

      ( A---B---C ) feature@{1}
       /
      /       A'--B'--C' feature
     /       /
D---E---F---G master
Run Code Online (Sandbox Code Playgroud)

提交 A、B、C 在 rebase 后悬空,但可以通过git reflog featureas访问feature@{1}

合并

如果有人拉了你的分支,或者你把它推到了某个地方,你应该合并到它,以避免在另一端造成混乱和额外的工作。请参阅从上游 rebase 恢复

这是git merge masterin branch的结果feature

      A---B---C feature                    A---B---C---M feature
     /                   --merge-->       /       ,---’
D---E---F---G master                 D---E---F---G master
Run Code Online (Sandbox Code Playgroud)

或者,如果你git merge feature在 branch master,它看起来像这样:

      A---B---C feature                    A---B---C feature
     /                   --merge-->       /         \
D---E---F---G master                 D---E---F---G---M master
Run Code Online (Sandbox Code Playgroud)

  • 我从未见过关于合并和变基之间差异的更清晰的解释。谢谢你。 (4认同)
  • 你是什​​么意思“看不到我的分支了”?无论如何,`git rebase` 应该只在分支尚未分发时使用,我认为是这种情况,因为你说它是一个新分支,抱歉。请参阅我链接到的文档中的 [从上游变基恢复](http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html#_recovering_from_upstream_rebase)。你必须改用`git merge`。如果你想找回它,你可以使用 `git reflog` 来找到你以前的功能分支头。 (2认同)