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