master
和entidades
的GIT存储库。我需要将来自entidades
分支的一些东西合并到master
分支中。请看图片,标记为EntityBundle
的文件夹是我需要从entidades
合并到master
中的唯一内容,我该如何操作?在SmartGit上,我点击了entidades
分支的"merge"按钮,得到了像图片中展示的消息,但我搞不清楚正确的选择方式是什么,以便不破坏master
存储库,请问有什么提示吗?
** 我的工具中的图表表示 **
我假设你的历史看起来像这样:
* 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
然后,你可能会将主分支推送到远程仓库。通常,如果你在entidades
上完成了工作(例如,它是一个功能分支,现在已合并到主分支),你也会同时在本地和远程删除该分支。
你的另一种选择合并到工作树,我想,会执行合并操作,但不会提交结果。如果是这样,如果你接着做git commit
,你最终会到达与创建合并提交完全相同的状态;前者只是给你编辑提交的机会。
将entidades
变基到master
看起来会像这样:
* 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
。我们已经更改了分支的“基础”,或者说已经对其进行了“变基”。
变基会更改历史记录。您可以在此处看到,entidades
和 origin/entidades
已经分叉:它们都有自己独特的提交。 entidades
有提交 D..B´
,而 origin/entidades
有提交 D..B
。
如果您还没有推送分支,那么变基通常是“社交上可接受”的,因为然后只有您自己能够知道历史记录已更改。但是,一旦您将更改推送到某个远程仓库,其他人可能会以原始的 entidades
为基础进行更改:他们会注意到您正在重写历史记录。因此,推荐建议是不要对已经推送的内容进行变基,因为这可能会给人们带来麻烦。 (任何对 entidades
进行更改或创建分支的人都需要单独对其进行变基,这可能是一个冗长或繁琐的过程。)
为了将新的 entidades
推送到 origin
,您需要使用 git push -f
。(-f
表示“强制”;您需要强制执行它,因为您正在重写历史记录,而且出于上述原因,这通常是一项需要小心处理的事情。)
请注意,entidades
仍未合并到 master
中;但是,如果它现在基于 master
本身(即最新提交,而不是某个祖先),那么您可以将 master
设置为快进至 entidades
。是否这样做取决于您。
entidades
和master
是否在过去已经相互合并,或者它们是否正如图表所示的那样:如果它们没有这样做,那么找到共同祖先将非常容易(就是它们相遇的地方)。 - Thanatos
entity
分支上是最新的,但在master
上不是。 - ReynierPM