git merge和git rebase命令

参考链接:https://www.cnblogs.com/michael-xiang/p/13179837.html

学习背景:已经学习过git,但是实践较少,未和他人协作

1.merge

git merge表示把当前分支合并到版本库中下拉的远程分支上。

git merge A B表示把A分支合并到B上。

1.1 fast forward合并

合并说明:

  • fast forward合并指合并两个没有分叉的分支。

  • 合并效果是高版本分支替换低版本分支,低版本分支的HEAD指针指向高版本分支最新的提交。

举例:

多人合作项目,自己请假回家多日未工作。同事已经提交了好几个版本的新代码。请假结束后,使用git pull下拉最新代码,因为自己仓库版本是远程仓库的老版本,即没有分支。那么下拉会使用fast forward合并,覆盖自己所有代码。如果同事修改过你的代码,那么你下拉后会变成同事修改的版本。

图示举例:

feature是远程仓库的分支

在这里插入图片描述

master是本地仓库的分支。对比发现本地分支没有未上传远程仓库的提交,因为远程仓库有d2falae的提交,这是本地仓库最新提交

在这里插入图片描述

使用git merge合并,先尝试fast forward合并,合并成功,将本地master分支合并成了远程feature分支,本地HEAD指向和feature分支一样的41bd1d9提交

在这里插入图片描述

1.2 no fast forward合并

合并说明:

  • no fast forward合并指合并两个有分叉的分支。

  • 合并效果是在高版本分支上新创建一个提交记录,表示低版本分支的修改,之后高版本分支替换低版本分支,低版本分支的HEAD指针指向高版本分支最新的提交。

举例:

多人合作项目,自己写的代码已经提交,但是未上传远程仓库。同事已经提交了好几个版本的新代码,并且你们没有共同修改相同的文件。此时用git pull下拉最新代码,此时你的分支和同事的分支发生了分叉,分叉部分就是你未上传远程仓库的提交。那么下拉会用no fast forward合并,在远程仓库的新分支上新建一个提交,表示在新分支上合并你的提交。

图示举例:

feature为远程分支,master为本地分支,本地分支有未上传的提交,无法用fast forward合并

在这里插入图片描述

使用git merge会先尝试fast forward合并,失败后会使用no fast forward合并,可以看见新创建了一个提交e0c3d77表示将master最新提交3793081和feature最新提交41bd1d9合并的结果

在这里插入图片描述

2.rebase

git rebase表示把当前分支作为基,让版本库中下拉的远程分支向前移植。

git rebase A B表示把A分支作为基,让B分支向前移植。

变基说明:

  • 使用rebase指定基分支和目标分支,之后找到基分支和目标分支的最近公共祖先,远程分支不变。从最近公共祖先开始,将目标分支在最近公共祖先后的提交插入基分支后最新提交之后,目标分支在最近公共祖先后的每个后续提交都发生了更新。这样让远程分支的基变成本地分支之后,相当于本地分支的最新提交和远程仓库的分支没有分叉,可以使用fast forward合并本地和远程分支。

图示举例:

feature为远程仓库分支,master为本地分支

在这里插入图片描述

使用git rebase,让本地分支master做基,远程分支feature前移

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vanghua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值