git的Rebase和Merge之间的区别
有人会说Merge更好,因为它保留了最完整的工作历史。其他人则认为,Rebase变得更整洁,这使审阅者的生活更轻松,更高效。本文将解释合并和重新设置之间的区别是什么,使用它们之一有什么好处。
从根本上讲,合并和rebase提供了相同的目的,以将来自一个分支(有时倍数分支)的变化集成到另一个分支中。最常用的是在打开Pull请求之前将最新的Master或开发分支集成。虽然目的是相同的,但Merge和Rebase达到的方式不同。

想象一下,您有一个这样的分支“功能”,它是从“基础”的“开发”分支出来的。从那时起,您就完成了C,D,E的工作,并且对develop进行了2个更改,即A,B。现在,您想打开一个pull请求,将“您的功能”集成到“ develop分支”中。。在此之前,您必须将“开发分支”中的更改集成到“您的功能分支”中,这样您的拉取请求中就不会出现冲突。
Merge

合并将在您的特征分支中将更改集成,并创建一个新的提交F. F是合并开发分支的提交,如果有的话,对冲突进行排序。此方法将为特征分支带来Develp分支的更改,即A和B。现在,您的特征分支上的提交是C,A,D,B,E,F.有3个添加到您的功能分支中的其他提交。
Rebase

另一方面,rebase会移动整个功能分支,就像它从一开始就从开发分支的最新提交分支出来一样。Rebase将首先搜索功能分支的基础,然后将其更改为开发分支B上的最新提交,然后根据该基础B将所有提交重新应用到功能分支上。Rebase实际上是创建新提交,C’,D’,E’。原始提交保持不变。最后,它将要素分支指向的要素从E更改为E’。
优点
这两种方法之间的最大区别在于,合并保留了作品的完整历史记录,包括按时间顺序排列,而Rebase使提交变得整洁,仅与分支上的作品相关。当审阅者审阅您的PR时,如果您选择合并,她将看到A,B,C,D,E,F提交,如果您选择Rebase,则只会看到C,D,E。
合并具有较高的可追溯性。无论与该公关相关如何,您都可以找到整个工作历史。但它可能对审稿人来说是痛苦的,因为该分支包括许多无关的犯罪,并且往往很难识别它们。
Rebase的确可以使PR整洁,干净且相关,而不会产生嘈杂的提交。审阅者可以轻松了解此PR的含义以及该分支内进行的更改。但是,如果您想跟踪存储库的详尽历史记录,可能并没有太大帮助。
Merge具有更高的可追溯性,而Rebase则更整洁且易于审核。
那我应该使用哪一个?
这实际上取决于您的组织所采用的工作策略。您必须权衡Rebase的价值与Merge可追溯性的价值。这两种方法也可能同时应用,在某些情况下请使用某种方法。
根据我的个人经验,Rebase更为有利,因为它提供了与团队成员合作的更轻松的方式。而且在大多数时候,我们确实应该避免将与我们的工作无关的提交包含在PR中。这很容易导致混乱。
git的Rebase和Merge之间的区别的更多相关文章
- git之rebase、merge和cherry pick的区别(面试常问)
git flow图例镇楼 merge 这个简单,初学者常用.比如主分支是Dev,最新版本是01.然后小明基于此,搞了个feature 分支A,业务:打酱油.然后在上面多次提交,完成功能迭代开发,如A1 ...
- git比较两个版本之间的区别
查看当前没有add 的内容修改: git diff 查看已经add 没有commit 的改动 git diff --cached 查看当前没有add和commit的改动: git diff HEAD ...
- git/svn里面的merge和rebase区别
现在一般都用界面化的东西了,这种用法相近的命令行知不知道区别都可以.但是有些人喜欢研究,那么我来个传送门: 当我们用命令行操作git的时候,merge和rebase 有什么区别,请参考 https:/ ...
- 关于Git中分支merge和rebase的适用场景及区别
最近刚接触Git,下面对一些基本的使用做一下总结. 本文是转载于CSDN:http://blog.csdn.net/rryqsh/article/details/8230560 几乎所有的版本控制工具 ...
- Git:pull --rebase 和 merge --no-ff
首先是吐嘈 如果你正在 code review,看到上图(下文将称之为:提交线图)之后,特别是像我这样有某种洁癖的人,是否感觉特别难受?如果是的话,请看下文吧 :) 为什么 Git 作为分布式版本控制 ...
- git rebase 还是 merge的使用场景最通俗的解释
什么是 rebase? git rebase 你其实可以把它理解成是“重新设置基线”,将你的当前分支重新设置开始点.这个时候才能知道你当前分支于你需要比较的分支之间的差异. 原理很简单:rebase需 ...
- git fetch和git pull之间的区别--转载
原文地址:http://blog.csdn.net/a19881029/article/details/42245955 git fetch和git pull都可以用来更新本地库,它们之间有什么区别呢 ...
- git代码合并:Merge、Rebase的选择
代码合并:Merge.Rebase的选择 Zhongyi Tong edited this page on Dec 7, 2015 · 3 revisions Pages 19 Home 2.1 快速 ...
- Git Rebase和Merge的用法
title: Git Rebase和Merge的用法 categories: 后端 tags: - Git Rebase和Merge是什么? merge和rebase的作用都是合并两个分支,其区别在于 ...
- 13.Git分支-变基(rebase)、rebase VS merge
1.变基的基本操作 在Git中整合来自不同分支的修改主要有两种方法:merge和rebase. 看下面的例子: 开发任务分叉到了两个不同的分支,并且都有了新的提交. 这时候我们可以使用 git mer ...
随机推荐
- scala概述入门和项目创建
1.scala简介 (1).scala基于JVM,与JAVA完全兼容,具有跨平台.可移植性好.方便的垃圾回收等特性: (2).scala比JAVA更加面向对象: (3).scala是一门函数式编程语言 ...
- Linux 获取内网IP地址脚本
IP=$( /sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr: ...
- Windows系统更改/迁移用户目录
系统盘为C盘,C盘空间不足,C盘太满了,C盘清理时查看发现C:\Users目录占用几十个GB,以下方法可将Users目录大部分空间转移. 1. 准备工作 更改/迁移用户目录之前先自行备份当前用户的资料 ...
- Markdown基础使用学习
Mark Down学习 标题:#+标题名字 二级标题:## +标题名字 三级... 字体 两个*+字+两个=加粗 一个=斜体 引用 一个大于号+内容 图片  符号全部小写 超链接 ...
- xShell执行js脚本
var CMD = 'ls'; var INTERVAL = 1; var MAX = 5; var CR = String.fromCharCode(13); var LF = String.fro ...
- openfire开源IM服务器知识分享+社交app实战
一. 概述 Openfire最主要的功能是实现XMPP服务器,简单来说,openfire为我们提供一个固定的地址,我们只需要向openfire服务器发送标准的XMPP信息(即XML文件流), ...
- 如何简单使用Git
Git基本功能 Git基本功能 在具体介绍Git能做什么之前,先来了解下Git里的四个角色: workspace: 本地的工作空间. index:缓存区域,临时保存本地改动. local reposi ...
- Spring Boot基础依赖
<properties> <java.version>1.8</java.version></properties><parent> < ...
- 【分享】HMCL启动器
HMCL-3.3.173.exe 链接:https://pan.baidu.com/s/1KpEm3K0asNhPAXjufsCGIA 提取码:93kr
- 单调栈应用--视野总和 go版本
1.视野总和描叙:有n个人站队,所有的人全部向右看,个子高的可以看到个子低的发型,给出每个人的身高,问所有人能看到其他人发现总和是多少.输入:4 3 7 1输出:2解释:个子为4的可以看到个子为3的发 ...