聊下git pull --rebase
有一种场景是经常发生的。
大家都基于develop拉出分支进行并行开发,这里的分支可能是多到数十个。然后彼此在进行自己的逻辑编写,时间可能需要几天或者几周。在这期间你可能需要时不时的需要pull下远程develop分支上的同事的提交。这是个好的习惯,这样下去就可以避免你在一个无用的代码上进行长期的开发,回头来看这些代码不是新的代码。甚至是会面临很多冲突需要解决,而这个时候你可能还需要对冲突的部分代码进行测试回归,这就很麻烦了。
那么我们来看一下你在pull时候需要习惯性的加上—rebase参数,这样可以避免很多问题。--rebase的本意是想让事情的发展看起来很连续和优美,而不是多出很多无用的merge commit 。
你在有些时候pull代码的时候会有这样的一个提示:
这个时候你是习惯性的,”esc :wq“,直接默认commit注释。然后你的commit log就多了一笔很不好看的log。
如果你不懂的在最后release的时候合并掉这些无意义的commit,最后你的release分支就会被你搞的很丑陋。(合并commit请参考:聊下git merge –squash)
这个问题的出现是正常的,我们来看下为什么会出现这个问题。正常情况下的分支commit路线:
当前develop分支上有三个commit。现在我们两个项目开始启动,需要分别拉出两个分支独立开发。
我们分别checkout –b 出来两个分支,独立开发互不干扰。正常情况下,如果这两个分支的改动都没有重贴或者冲突的时候,一切都很顺利的。(重贴是指可以被系统自动合并的修改,而冲突是需要你手动解决的。你要重现这个现象还是有点小麻烦的,你要修改刚好可以重贴的位置,而不是直接导致冲突的地方)
我在develop_newfeature_authorcheck里修改了点东西,push到develop。然后checkout 到develop_newfeature_apiwrapper。
git pull
这将会把develop_newfeature_authorcheck分支的修改直接拉下来于本地代码merge,且产生一个commit,也就是merge commit。
你可以使用 git pull –rebase 这样的结局就完全不一样。—rebase 并不会产生一个commit提交,而是会将你的E commit附加到D commit的结尾处。在看commit log时,不会多出你所不知道的commit出来。其实此处的F commmit是无意义的,它只是一个merge commit。而且这里面的message里面的branch日后也不存了,这些分支都会被清除掉。
git pull –rebase 会使commit看起来很自然。
因为代码都有一个前后依赖,只是这个依赖在开发的时候谁先谁后的问题。
作者:王清培
出处:http://www.cnblogs.com/wangiqngpei557/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面
聊下git pull --rebase的更多相关文章
- Git----拉取远程分支,git pull,git rebase,git pull --rebase的区别
git pull 相当于自动的 fetch 和 merge 操作,会试图自动将远程库合并入本地库,在有冲突时再要求手动合并. git rebase 可以确保生产分支commit是一个线性结构,方便ro ...
- 关于git中git pull --rebase中的一些坑
在公司里面,每次我更改完代码,准备pull最新代码时,总是会遇到各种各样的问题.,因为对应的问题不同,解决方法很多.但是比较通用的办法还是有的: git pull --rebase //报错时 g ...
- git pull --rebase
git reset --hard orgin/master $ git push bit 1.8-subchannels To git@bitbucket.org:cms.git ! [rejecte ...
- Difference between git pull and git pull --rebase
个人博客地址: http://www.iwangzheng.com/ 推荐一本非常好的书 :<Pro Git> http://iissnan.com/progit/ 构造干净的 Git ...
- git pull --rebase 做了什么? 以及 Cannot rebase: You have unstaged changes 解决办法
最近刚学 git rebase,觉得很牛逼的样子, 结果今天就被打脸了. git pull --rebase 报错: Cannot rebase: You have unstaged changes ...
- 对比git pull和git pull --rebase
1.使用下面的关系区别这两个操作:git pull = git fetch + git mergegit pull --rebase = git fetch + git rebase 2 一.基本 g ...
- 聊下 git 多账户问题
git 多账户问题 标签(空格分隔):git github gitlab git多账户 背景 git 多账号配置 ssh 多密钥对配置 背景 在使用 git 的时候我们都会面临多账户问题,比较常见的就 ...
- git pull以及git pull --rebase
git pull的作用是将远程库中的更改代码合并到当前分支中,默认为:git fetch + git merge git fetch 的作用就相当于是从远程库中获取最新版本到本地分支,不会自动进行gi ...
- 简单对比git pull和git pull --rebase的使用
使用下面的关系区别这两个操作:git pull = git fetch + git mergegit pull --rebase = git fetch + git rebase 现在来看看git m ...
随机推荐
- 大数据实践-数据同步篇tungsten-relicator(mysql->mongo)
// mongo)";digg_bgcolor = "#FFFFFF";digg_skin = "normal"; // ]]> // [导读] ...
- struts2学习笔记--struts.xml配置文件详解
这一节主要讲解struts2里面的struts.xml的常用标签及作用: 解决乱码问题 <constant name="struts.i18n.encoding" value ...
- 在Navicat premium上创建的SQL Server数据库,实现用PHP连接(即php连接微软MSSQL)
用 freetds 或 dblib的方式连接sql server 在windows下使用FreeTDS 什么是FreeTDS? FreeTDS其实就是一个开源(或者可以说成自由)的C程序库,它可以实现 ...
- 初来乍到 Java 和 .Net 迭代器功能
最近有一个需求是这样的, 根据键值对存储类型数据,也算是数据缓存块模块功能设计. 一个键对应多个值.每一个键的值类型相同,但是每个不同的键之间类型不一定相同. Java 设计如下 HashMap< ...
- 开发漫谈:千万别说你不了解Docker!
1dotCloud到Docker:低调奢华有内涵 写在前面:放在两年前,你不认识Docker情有可原.但如果现在你还这么说,不好意思,我只能说你OUT了.你最好马上get起来,因为有可能你们公司很 ...
- JavaScript一词被《牛津大词典》收录了
早上看VS Team的推特发了这个图片,以前总爱问Java怎么读,现在好了,有标准发音了. 确定是 扎瓦·死磕瑞普特 ,哈哈,以后不要再念加瓦了. …… Last month JavaScript r ...
- What does "size" in int(size) of MySQL mean?
What does "size" in int(size) of MySQL mean? https://alexander.kirk.at/2007/08/24/what-doe ...
- html 输入框 只能输入数字 只能输入字母数字组合
JS判断只能是数字和小数点 1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'' ...
- Lind.DDD.Repositories.Redis层介绍
回到目录 之前已经发生了 大叔之前介绍过关于redis的文章,有缓存,队列,分布式pub/sub,数据集缓存以及仓储redis的实现等等,而今天在Lind.DDD的持久化组件里,redis当然也有一席 ...
- Lind.DDD.Domain.ISortBehavor~上移与下移
在进行列表排序时,有个“上移”和“下移”操作,这个一般在内存里完成,然后统一提交到数据库中,对于上移与下移的设计,大叔在LIND.DDD.DOMAIN里有一个ISortBehavor接口,主要是说,如 ...