【问题标题】:How to merge branch to a master branch with or without changes?如何在有或没有更改的情况下将分支合并到主分支?
【发布时间】:2018-02-02 13:26:28
【问题描述】:

我对此感到很困惑。在以下场景中,您如何最好地将本地功能分支添加回主分支,然后再将其推回存储库?请注意,我不是从终端使用 git,我使用的是sourcetree,所以我对 git 行话不是很熟悉。

场景 A:团队中没有人将更改推送给 Master

Master                A
                       \
Feature branch          B - C - D

场景 B:当我在本地分支机构工作时,有人推送了更改

Master                A - E
                       \
Feature branch          B - C - D

【问题讨论】:

标签: git merge version-control


【解决方案1】:

场景 A 很简单,因为从功能分支到 master 的正常推送应该完全没有问题。在场景 B 中,如果我们尝试简单地推送,Git 会告诉我们我们的功能分支已经落后于master。解决此问题的两种主要方法是合并和变基。

对于合并选项,我们可以将master 分支合并到我们的特征中,然后将特征合并到master。这是用于将master 合并到功能分支的 Git 命令:

git checkout feature
git merge origin/master

下面是一张图表,显示了合并选项的最终结果:

master:  A ---------- E ---- N
          \             \   /
feature:   B -- C -- D -- M

这里的M 是将master 合并到功能分支中产生的合并提交。我们需要这样做以使功能分支与远程 master 保持同步。然后,为了将我们的更改带入master,我们也在master 中进行了合并提交。

从功能上讲,合并可以完成工作,但正如您从历史中看到的那样,它并不总是在 Git 中开展业务的最整洁的方式。合并的另一种方法是变基:

git checkout feature
git rebase origin/master

这是变基的样子,我强调你可以在图中看到的情况:

master:  A -- E
          \
feature:    B -- C -- D

rebase 的第一步是将功能分支回退到功能和master 之间的最新祖先提交,然后在功能分支顶部播放来自master 的新提交:

master:  A -- E
          \
feature:   E        [B, C, D commits not yet reapplied]

接下来,我们在新基础上重新应用您的独特提交:

master:  A -- E
          \
feature:   E -- B' -- C' -- D'

我们可以改写如下:

master:  A -- E
                \
feature:          B' -- C' -- D'

现在请注意,功能分支完全领先 master。现在推送或拉取请求应该可以完成,没有任何冲突。

【讨论】:

  • 我明白了,谢谢。但是在第一个场景中(也是场景 B 中的最后一步),在推送到 repo 之前,我如何将功能分支“放置”在 master 之上?所以我最终会得到我的意思的主分支。
  • @Moody 将重新定位的功能分支推送到master 您如何将该分支放在master 之上。尽管变基的步骤可能看起来很复杂(确实如此),但最终结果会让您处于有利位置,因为您的功能分支然后领先于master。基本上,您正在将场景 B 转换为场景 A。
  • 好的,谢谢。我只是想确定一下,因为我不想将更改推送到 repo 并为团队的其他成员搞砸事情。我认为使用“推送”会将我的功能分支按原样发送到存储库,而不会自动将其与 master 合并。
  • 是的,它会,但是在场景 A 中推送也是如此。如果这是一个问题,那么您的组织很可能会阻止直接推送到 master,而是让每个人都通过拉取请求.
猜你喜欢
  • 2017-04-25
  • 2015-02-19
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 2017-02-26
相关资源
最近更新 更多