阅读 216

git rebase 和 git merge 的区别

前提

所有的工作都是需要前提的, 我们的前提就是 得有一个项目不是?

  1. 创建一个空的项目juejin,并且git初始化git init, 这样我们就创建了一个新的仓库, 此时这个仓库里什么都没有;

  2. 创建一个README.md echo "hello world!" >> README.md

  3. 进行提交: git add README.md ,  git commit -m "add: hello world "

image.png

有了前提, 那么我们就要创建 一个 分支

创建分支并且切换分支 有两种:

  1. git checkout -b branch-a

  2. git switch -c branch-a

这样, 我们就有一个分支branch-a, 现在我们主要进行以下步骤:

  1. 分支上 进行 对内容修改, 并且提交

  2. 切换到 主干 上 对内容修改 并且提交

此时, 从下图中就可以看出, 两次不同分支的提交, 并且 他们都有一个共同的父级 (1c7c6a3a4b)

image.png

整合分支: (git merge)

  1. 切换到 主干 git switch/chekcout master

  2. 合并分支 git merge branch-a (会遇到冲突, 记得解决冲突再提交)

如下图, 可以看出  在 主干上重新 创建了一个 commit, 并且 它的 父级 变成了两个: 一个是 主干上的提交, 另一个是 分支上的提交; 这还是简单的一个项目, 如果是大型的项目, 创建N个分支, 然后进行 N次合并, 那么 交错复杂的线, 得多么的喜人; 其实很多的分支 不一定要 留着, 所以的 整合分支的 另一种 方式 git rebase(变基) 油然而生;

image.png

image.png (来自官方的图)

image.png

整合分支(git rebase )

为了简洁, 创建新的分支 branch-b, 并且再进行 主干 和 分支的 合并, 跟前面一样, 两次分支的提交,在 (9697deb7b8)提交记录上分叉,并且 分支提交的父级都是指向

image.png下面进行整合分支:

  1. 切换到 分支上 git switch/checkout branch-a

  2. 变基 git rebase master, 此时就看到了, 刚刚的分叉, 变成了一根线,并且分支的提交记录的父级 指向了 主干的最近一次的提交记录上;

image.png仔细的读者,会发现, 此时的主干master还是停留在之前的提交上, 所以我们得将 主干master指向 最新的commit上

  1. git merge branch-b, 在这里其实就是 修改了master的引用指向,.git/refs/heads/master 或者 直接 git cat-file -p c4ed63d23 可以查看 指向

image.png

这样就完成了分支的合并, 并且没有那些错综复杂的线

image.png

image.png


作者:请叫我张先森
链接:https://juejin.cn/post/7036933570501296141

 伪原创工具 SEO网站优化  https://www.237it.com/ 


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐