聊下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/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面

时间: 2024-09-20 08:07:33

聊下git pull --rebase的相关文章

idea下git pull的生活 因为一个iml文件,导致pull失败,怎么解决

问题描述 idea下git pull的生活 因为一个iml文件,导致pull失败,怎么解决 解决方案 因为这个文件没有track 你如果不需要合入代码库 那你就删除

git pull --rebase

有的同学在使用 git 时会不小心本地分支merge了远端的公共分支(通过 git pull ),我找了篇文章帮助大家学会 pull 的时候直接 rebase http://gitready.com/advanced/2009/02/11/pull-with-rebase.html 其实很简单,对应的命令行是: git pull --rebase <remote name> <branch name> 由于 merge 提交会湮灭掉一些原始 commit 导致 rebase 时带来

聊下 git 多账户问题

git 多账户问题 标签(空格分隔):git github gitlab git多账户 背景 git 多账号配置 ssh 多密钥对配置 背景 在使用 git 的时候我们都会面临多账户问题,比较常见的就是公司内部的 gitlab,开源平台 github ,我们都需要在一台电脑上同时使用,这需要解决两个问题. git 多账号配置 git config --global user.name 设置全局用户名git config --global user.email 设计全局邮箱 git config

聊下git merge --squash

你经常会面临着将dev分支或者很多零散的分支merge到一个公共release分支里. 但是有一种情况是需要你处理的,就是在你的dev的分支里有很多commit记录.而这些commit是无需在release里体现的. develop 主分支 develop主分支最近的一个commit是"fix imageprint bug.".我们拉出一个分支进行项目开发,里面会有很多commit记录. git checkout -b develop_newfeature_ImportDataInte

聊下 git remote prune origin

在你经常使用的命令当中有一个git branch –a 用来查看所有的分支,包括本地和远程的.但是时间长了你会发现有些分支在远程其实早就被删除了,但是在你本地依然可以看见这些被删除的分支. 你可以通过命令,git remote show origin 来查看有关于origin的一些信息,包括分支是否tracking. Local refs configured for 'git push',这一栏说明你push了哪些分支上origin. develop_newfeature_apiwrapper

git使用rebase模式的配置

1.同分支拉取使用: git pull --rebase 2.不同分支衍合: ## local machine (develop)$: git pull origin develop --rebase   ## 切换到 feature 分支,衍合develop分支,如有冲突,解决冲突后continue,再次 commit (develop)$: git checkout feature/user-extension (feature/user-extension)$: git rebase de

git pull使用【转】

转自:http://www.yiibai.com/git/git_pull.html git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并.它的完整格式稍稍有点复杂. $ git pull <远程主机名> <远程分支名>:<本地分支名> 比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样. $ git pull origin next:master 如果远程分支是与当前分支合并,则冒号后面的部分可以省略.

Git远程04:git fetch &amp; git push &amp; git pull

这三条语句的,完整的命令为: 1 git fetch [远程仓库名] [分支01]:[分支02] 实际使用时,远程仓库名和分支名,在特定的情况下可以省略.一两句话说不清楚,采用脑图的方式展示.请一定要注意当前所在的分支是什么. 如果图片显示太小,请到汪汪的网盘下载(文件夹为/Git),如果有XMind,请直接查看脑图源文件. 2015.08.19更新:git fetch & git push & git pull.png:git fetch & git push & git

02_创建Git仓库,克隆仓库,git add,git commit,git push,git pull,同行冲突,不同行冲突的结局方案,git mergetool的使用

1 创建Git资源库,残酷目录信息 创建git资源库的命令: git init –bare 仓库名称 (其中-bare表示的意思是空的库的意思) 进入E:\software\repository\git\itheima28,截图如下: hooks:提交一些脚本文件 info:存放一些个人信息,配置信息 objects:所有数据存放位置 refs:git指针信息,记录了修改了什么等的信息 config:核心的配置信息 description:描述信息 HEAD:存放的分支信息. 2 使用上面创建的