我假设你的历史看起来像这样:
* 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
然后,您可能会将 master 推送到 origin。通常,如果您完成了 entidades 的工作(例如,它是一个功能分支,并且该功能现在已合并到 master 中),您还将在本地和远程删除该分支。
您的其他选项之一,合并到工作树,我认为会执行合并,但不提交结果。如果这是它所做的,如果你然后做一个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 进行更改:他们会注意到您的历史重写。因此,建议的建议是不要对已推送的内容进行 rebase,因为这可能会惹恼人们。 (对entidades 进行了更改或分支的任何人都需要单独也重新调整他们的更改,这对他们来说可能是一个乏味或繁重的过程。)
为了将新的entidades 推送到origin,您需要git push -f。 (-f 的意思是“强制”;你需要强制它,因为你正在重写历史,由于上述原因,这通常是你应该小心做的事情。)
注意entidades仍然没有合并到master;但是,如果它现在基于master 本身(最新提交,而不是某个祖先),那么您可以将master 快进到entidades。想不想,就看你自己了。