快进,合并提交或合并到工作树,这是在这里选择的正确选项?

时间:2014-07-10 19:06:11

标签: git merge smartgit

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

enter image description here

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

enter image description here

1 个答案:

答案 0 :(得分:14)

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

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

(较新的提交位于该图的顶部,较旧的位于底部)换句话说,entidades在一段时间之前偏离了大师,您想要在这些选项之间进行选择。您应该学习如何在工具中显示/查看这些图表:它们可以帮助您了解当前历史记录的内容以及您对其所做的更改。 (这样的数据可能会澄清你的问题。)

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

现在,您的选择:

合并

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

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

然后,你可能会把主人推向原点。通常情况下,如果您已完成entidades的工作(例如,它是一个功能分支,并且该功能现已合并到主服务器中),您还可以在本地和远程删除该分支。

您的其他选项合并到工作树我认为,将执行合并,但保留结果未提交。如果这是它的作用,那么如果您执行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最初是基于&#34;提交D,因为它是master的分歧;你所做的改变是基于&#34;基于&#34;在那一点上。 rebase此处会将其更改为基于提交A。我们更改了分支机构&#34; base&#34;或&#34; rebased&#34;它

重新定位更改历史记录。 您可以在此处看到此信息,entidadesorigin/entidades 分歧:他们都有自己独特的承诺。 entidades已提交D..B´,而origin/entidades已提交D..B

重新定位通常是&#34;社会可接受的&#34;如果你没有推动分支,因为那时你就是唯一可以说历史永远改变的人。但是,一旦您将更改推送到某个遥控器,其他人可能会将其更改基于原始entidades:他们注意您的历史记录重写。因此,建议的建议是不要改变被推动的东西,因为这会使人们感到困惑。 (对entidades进行更改或分支的任何人都需要同时修改他们的更改,这对他们来说可能是一个繁琐或繁琐的过程。)

要将新的entidades推送到origin,您需要git push -f。 (-f表示&#34;强迫&#34 ;;你需要强制它,因为你正在重写历史,这通常是你应该谨慎做的事情,原因如上。)

请注意,entidades仍未合并到master;但是,如果它现在基于master本身(最新提交,而不是某些祖先),那么可以快进masterentidades 。无论您是否愿意,都取决于您。