【问题标题】:Fast-forward, merge commit or merge to working tree, which is the right option to pick here?快进,合并提交或合并到工作树,这里选择哪个是正确的选择?
【发布时间】:2014-07-10 19:06:11
【问题描述】:

我有一个 GIT 存储库,它有两个分支 masterentidades。我需要从entidades 分支合并到master 分支。看一下图片,标记为EntityBundle 的文件夹是我唯一需要从entidades 合并到master 的东西,我该怎么做?我在 SmartGit 的entidades 分支上点击了合并,并收到了类似图片的消息,但在这里我迷路了,因为我不知道什么是正确的选择,以免弄乱master 回购,任何人都可以给我一个提示?

** 我的工具中图表的表示**

【问题讨论】:

  • entidades 分支是否已经提交并推送?
  • @hjelpmig 在entity 分支是的,它是最新的,但在master 没有

标签: git merge smartgit


【解决方案1】:

我假设你的历史看起来像这样:

* A (master, origin/master)
|
| * B (entidades, origin/entidades)
| |
< some number of commits on either branch>
| |
|/
* D

(较新的提交在该图的顶部,较旧的在底部)换句话说,entidades 前一段时间与 master 不同,您想在这些选项之间进行选择。您应该学习如何在您的工具中显示/查看此类图表:它们将帮助您了解当前历史的外观以及您对其所做的更改。 (这样的图表可能会澄清你的问题。)

我还假设您将 entidades 合并到 master。 (您的屏幕截图似乎证实了这一点。)

现在,您的选择:

合并

合并只是创建一个统一两个分支状态的提交。 (使它们相同。)看起来像这样:

* M (master)
|\
* | A (origin/master)
| |
| * B (entidades, origin/entidades)
| |
< some number of commits on either branch>
| |
|/
* D

然后,您可能会将 master 推送到 origin。通常,如果您完成了 entidades 的工作(例如,它是一个功能分支,并且该功能现在已合并到 master 中),您还将在本地和远程删除该分支。

您的其他选项之一,合并到工作树我认为会执行合并,但不提交结果。如果这是它所做的,如果你然后做一个git commit,你最终会和创建合并提交;完全相同。前一个选项只是让您有机会编辑提交。

变基

entidadesmaster 的变基看起来像这样:

* B´ (entidades)
|
< the commits made to entidades >
|
* A (master, origin/master)
|
| * B (origin/entidades)
| |
< some number of commits on either branch>
| |
|/
* D

正如我所展示的,entidades 最初是“基于”提交D,因为那是它与master 不同的地方;您所做的更改是“基于”这一点的。 rebase 将在此处将其更改为基于提交 A。我们已经更改了分支的“基础”,或“重新设置”它。

变基更改历史记录。你可以在这里看到这一点,entidadesorigin/entidades分歧:他们都有提交对自己独一无二。 entidades 有提交D..B´,而origin/entidades 有提交D..B

如果您没有推动分支,重新定基通常是“社会可接受的”,因为只有您才能知道历史已经改变。但是,一旦您将更改推送到某个远程,其他人可能会根据原始 entidades 进行更改:他们注意到您的历史重写。因此,建议的建议是不要对已推送的内容进行 rebase,因为这可能会惹恼人们。 (对entidades 进行了更改或分支的任何人都需要单独重新调整他们的更改,这对他们来说可能是一个乏味或繁重的过程。)

为了将新的entidades 推送到origin,您需要git push -f。 (-f 的意思是“强制”;你需要强制它,因为你正在重写历史,由于上述原因,这通常是你应该小心做的事情。)

注意entidades仍然没有合并到master;但是,如果它现在基于master 本身(最新提交,而不是某个祖先),那么您可以master 快进到entidades。想不想,就看你自己了。

【讨论】:

  • 优秀的回答者,最后我添加了您在此处描述的相同图表,您能确认您之前所说的吗?
  • @ReynierPM:希望大部分帖子都是通用的;合并或多或少总是以相同的方式工作; rebase 的工作原理大致相同。我很好奇 entidadesmaster 过去是否相互合并,或者是否完全如图所示:如果他们没有,这将有助于找到共同点祖先很容易(这是两者相遇的地方)。
猜你喜欢
  • 2016-08-12
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 2015-08-20
相关资源
最近更新 更多