git的merge和rebase操作

拿idea git示例。

feature分支是基于master拉出来的特性分支。从两个枝干分叉点开始往上看。

看枝干,黄色的枝干是master,目前在master上面有3个圆点,就是三次commit操作。(其中"master第2提交",是我用这个commit message commit了两次。其实一共我push了两次。所以这里的圆点,就是commit的操作次数)

紫色的枝干上,也有三个圆点,分别是feature:第一次提交、第二提交、第三次提交。

看右侧的标签,此时远端feature上,最新的push是"feature第三次提交"的数据。

在远端master上,最新的push数据是"master第2提交"。

下面分开来看各自分支的提交。


我们的目的是将master 分支上的最新提交,合到feature上。

标题 merge操作

merge:找到两个不同分支最后的提交,作为两个祖先,生成新的提交点。

分支切换到feature,点击master,进行 master 合入feature,操作之后是:

master最新的提交是"master第2提交", feature最新的提交是"feature第三次提交",所以merge就是基于这两个节点,生成了新的提交节点,就是最上面那个绿色分支的圆点。可以看到绿色分支是把这两个父节点连起来了,然后生成了新的节点。

注意看标签的名称,因为feature我还没有push,所以第一个标签显示的是本地的"feature",而远端origin/feature分支,在他的下面。

点开本次merge操作,在右边能看到两个父节点的提交信息:

rebase操作

rebase是,把另一个分支上面的节点,逐个摘下来放到分支上面。

点击操作之后(onto是表示到... 上面、在... 表面,所以rebase feature onto master,是把feature的节点,放到master上面),把feature上面的三次commit,都逐个的拼到了master后面,作为全新的feature。

注意,我们看到又新生成了三个feature的hash值。所以rebase会进行历史的修改。

rebase注意事项

永远不要在已推送到远程的公共分支上执行 rebase! 因为会造成历史信息的改变,其他人再拉取的时候,会造成大量的冲突。

总结:

merge:大家一起盖楼,往上加层,谁都不影响谁

rebase 公共分支:你偷偷把下面的地基拆了重盖,上面所有人的房子全塌

相关推荐
louisgeek20 小时前
Git submodule 子模块
git
imDwAaY20 小时前
6篇文章讲清楚Git:Git 实用技巧:暂存现场、挑选提交与定位 Bug (5/6)
git·后端
imDwAaY20 小时前
6篇文章讲清楚Git:Git 团队开发实践:从 Pull Request 到版本发布 (6/6)
git·后端
誰能久伴不乏1 天前
看懂 Git 团队协作全流程:分支、提交、PR、rebase 到底在干嘛
git
sunshine22 girl2 天前
git tag-项目流程
git
imDwAaY2 天前
6篇文章讲清楚Git:Git 远程协作:fetch、pull、push 到底有什么区别?(3/6)
git·后端
imDwAaY2 天前
6篇文章讲清楚Git:Git 撤销与恢复:reset、revert、restore 应该怎么选?(4/6)
git
用户73309646123092 天前
再也不怕手滑丢代码!给 git 高危操作加一层安全校验
git
广白2 天前
Git Tag 实战:从出包追溯到版本发布
前端·git·面试
Winlifes8 天前
我给 Codex 做了一个 Git 面板:分支树、提交历史和工作区操作
git