我有一个包含两个分支master
和entidades
的GIT存储库。我需要从master
分支合并到entidades
分支。看一下图片,标记为EntityBundle
的文件夹是我唯一需要从entidades
合并到master
的文件夹,我是怎么做到的?我在SmartGit的entidades
分支上点击了合并,并得到了一个像图像显示的消息,但在这里我迷路了,因为我不知道什么是正确的选择,以免弄乱master
回购,可以给我一个提示吗?
**我的工具中的图表表示**
答案 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
,那么您最终会与创建合并提交完全相同;前一个选项只是让您有机会编辑提交。
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
最初是基于&#34;提交D
,因为它是master
的分歧;你所做的改变是基于&#34;基于&#34;在那一点上。 rebase
此处会将其更改为基于提交A
。我们更改了分支机构&#34; base&#34;或&#34; rebased&#34;它
重新定位更改历史记录。 您可以在此处看到此信息,entidades
和origin/entidades
分歧:他们都有自己独特的承诺。 entidades
已提交D..B´
,而origin/entidades
已提交D..B
。
重新定位通常是&#34;社会可接受的&#34;如果你没有推动分支,因为那时你就是唯一可以说历史永远改变的人。但是,一旦您将更改推送到某个遥控器,其他人可能会将其更改基于原始entidades
:他们会注意您的历史记录重写。因此,建议的建议是不要改变被推动的东西,因为这会使人们感到困惑。 (对entidades
进行更改或分支的任何人都需要同时修改他们的更改,这对他们来说可能是一个繁琐或繁琐的过程。)
要将新的entidades
推送到origin
,您需要git push -f
。 (-f
表示&#34;强迫&#34 ;;你需要强制它,因为你正在重写历史,这通常是你应该谨慎做的事情,原因如上。)
请注意,entidades
仍未合并到master
;但是,如果它现在基于master
本身(最新提交,而不是某些祖先),那么可以快进master
到entidades
。无论您是否愿意,都取决于您。