我有一个git存储库,它有两个分支masterentidades。我需要合并到master分支中的一些东西。看看这张图片,标记为entidades的文件夹是我需要从EntityBundle合并到entidades的唯一文件夹,我该怎么做?我在smartgit的master分支上点击了merge,得到了一条类似图片显示的消息,但在这里我迷路了,因为我不知道什么是正确的选择,以避免entidades回购的混乱,有人能给我一个提示吗?
**在我的工具中表示图表**

最佳答案

我想你的历史是这样的:

* 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的工作(例如,它是一个功能分支,并且该功能现在合并到master中),您还可以从本地和远程删除该分支。
我认为,您的另一个选项merge to working tree将执行合并,但不提交结果。如果这就是它所做的,如果您随后执行git commit,那么您将在与create merge commit完全相同的点结束;前一个选项只会给您一个编辑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最初是“基于”commitD,因为这是它与master的不同之处;您所做的更改是“基于”这一点。rebase这里将把它改为基于commitA。我们已经改变了分行的“基础”或“再基础”。
重新调整更改历史记录。你可以在这里看到这一点,因为entidadesorigin/entidades已经分道扬镳:它们都有自己独特的提交。entidades有提交D..B´,而origin/entidades有提交D..B
如果你没有推动这一分支,重新调整利率通常是“社会可以接受的”,因为只有你才能告诉人们历史已经发生了改变。但是,一旦您将更改推送到某个远程位置,其他人可能会将其更改基于原始的entidades:他们会注意到您的历史记录正在重新编写。因此,建议不要改变那些被推的东西,因为这可能会让人陷入困境。(任何对entidades进行了更改或分支的人都需要另外调整更改的位置,这对他们来说可能是一个乏味或繁重的过程。)
要将新的entidades推到origin,您需要git push -f。(-f意味着“强制”;您需要强制它,因为您正在重新编写历史,出于上述原因,这通常是您应该小心处理的事情。)
注意entidades仍然没有合并到master中;但是,如果它现在基于master本身(最新提交,与某些祖先相反),那么您可以将master快速转发到entidades。你想不想由你决定。

08-27 18:17