网站首页 > 基础教程 正文
git rebase和git merge是在日常开发中常用的用于分支合并的命令,也是非常容易误用的两个命令。本文将通过图文的方式去详解二者之间的区别。
git merge
git merge会为本次的合并过程生成一条新的commit,并将该commit添加到目的分支上。通常用于将feature分支的内容向主分支进行合并。
如下图所示,在main分支的c2提交后checkout了一个新分支feature。随后feature分支上提交了c3,c5和c7三个提交。于此同时,main分支也在往前推进,产生了c4,c6,c8三个提交。此时由于feture分支已经开发完毕,向main分支进行合并,在解决完冲突之后,main分支上产生了一个新的提交c9。
git rebase
git rebase是一种变基操作。两个分支有一个最近交汇的点,就称之为"基"。而变基就是移动该"基点",移动之后的效果就像是刚刚checkout分支一样。 该操作通常用于从main分支向feature分支同步最近的改动。
如下图所示,在main分支的c2提交后checkout了一个新分支feature。随后feature分支上提交了c3,c5和c7三个提交。于此同时,main分支也在往前推进,产生了c4,c6,c8三个提交。由于此时feature分支和main分支变得不一致,并且main分支有人也有修改了相同的文件,因此希望拉取到main分支的最新的改动,于是我们checkout到feature分支,然后执行rebase操作。
于是两个分支的公共交点转移到了c8,,并且生成了c3',c5',c7'三个提交。操作完毕后,就好像从main分支的c8节点开始checkout了一个新分支feature1,然后有了c3',c5',c7'三个提交。
在线实验
下面使用在线平台进行git的相关演练,非常推荐使用下面的在线学习平台 git在线操作学习地址open in new window,日常使用git的过程中,如果有一些不太确定的操作行为,可以使用该平台验证,这可以节约你的时间。在不知道这个平台之前,我都是去自己的github上新建一个test repo进行验证的。
实验1:git merge
使用下面的语句准备一些提交:
git commit -m "demo"
git checkout -b feature1
git commit -m "demo"
git commit -m "demo"
git checkout main
git commit -m "demo"
git commit -m "demo"
此时我们将feature1分支上的内容合并到main分支:
git checkout main
git merge feature1
可以看到main分支上有了一个新的提交c7。
实验2:git rebase
使用下面的语句准备一些提交:
git commit -m "demo"
git checkout -b feature1
git commit -m "demo"
git commit -m "demo"
git checkout main
git commit -m "demo"
git commit -m "demo"
此时我们将main分支上的改动内容合并到feature分支:
git checkout feature1
git rebase main
可以看到main和feature1相交的点来到了c6,并生成了c3'和c4'两个提交。
总结
- merge通常用于从feature分支向main分支合并开发的内容
- rebase通常用于feature分支拉取main分支的最新改动
- 上一篇: git用法普及之git clone
- 下一篇: Git是什么?这6个基础概念你需要了解
猜你喜欢
- 2025-04-23 Git是什么?这6个基础概念你需要了解
- 2025-04-23 git用法普及之git clone
- 2025-04-23 git 子模块
- 2025-04-23 Git 分支管理策略汇总
- 2025-04-23 掌握这 20 个 Git 命令,成为团队协作高手!
- 2025-04-23 Git使用的小技巧
- 2025-04-23 git笔记
- 2025-04-23 `git fetch`、`git clone` 和 `git pull` 的详细对比
- 2024-07-17 听说你还在用 Git 命令解决代码冲突?
- 2024-07-17 git pull/push 命令时每次都需要输入name/password
- 04-23【docker系列】打造个人私有网盘zfile
- 04-23Dockerfile最佳实践:构建优雅高效的容器镜像
- 04-23Dockerfile优化有技巧,Docker镜像构建提速10倍!
- 04-23IT工程师都需要掌握的容器技术之Dockerfile
- 04-23Dockerfile简单使用
- 04-23Dockerfile编写规范:打造属于你的容器化世界
- 04-23探秘Dockerfile:编写规范与最佳实践
- 04-23Dockerfile详解
- 最近发表
- 标签列表
-
- 菜鸟教程 (58)
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)