git rebase

场景一:本地与远端同一分支提交历史不一致

 1 # 修复了一个bug以后准备提交
2 git add models/paper.go
3 git commit -m 'fix a bug'
4 # 现在准备推送到远端
5 git push origin master
6 # push失败了,说明A在我之前已经提交了,我本地master分支的提交历史已经落后远端了,需要先pull一下,与远端同步后才能push
7 git pull
8 # 现在使用git log看下一提交历史:
9 git log --oneline --graph
10 * f63ecbf (HEAD -> master) Merge branch 'master' of https://gitee.com/greenhn/ganlin
11 |\
12 | * b91f711 (origin/master, origin/HEAD) 修正bug,优化内置通道配置
13 * | 8b76654 fix a bug
14 |/
15 * a1bc60a 完善日报接口
16 * 9f73b5e 增加内置通道设置功能
17 * a0d464e ...
18 # 竟然分叉了!由于我本地master的提交历史和远端的master分支的提交历史不一致,所以git为我进行了自动合并,然后生成了一个新的提交历史(f63ecbf Merge branch 'master' of)
19 #这个时候用git rebase就可以解决
20 git rebase
21 git log --oneline --graph
22 * 2e2b995 (HEAD -> master) fix a bug
23 * b91f711 (origin/master, origin/HEAD) 修正bug,优化内置通道配置
24 * a1bc60a 完善日报接口
25 * 9f73b5e 增加内置通道设置功能
26 * a0d464e ...
27 git push

简单操作: git pull --rebase 效果与上面是一致

场景二:不同分支之间的合并

 1 git checkout -b feature
2 vim newFunc.go
3 git add newFunc.go
4 git commit -m 'add new func'
5 git log --oneline --graph
6 * 4f58ab8 (HEAD -> feature) add new func
7 * 94c134b (master) init base
8 # 先尝试通过merge合并:
9 git checkout master
10 git merge feature
11 CONFLICT (content): Merge conflict in newFunc.go
12 Automatic merge failed; fix conflicts and then commit the result.
13 说明我两个分支之前的版本已经不同步了,需要手动合并冲突,再提交
14 git add newFunc.go
15 git commit -m 'merge master and feature'
16 git log --oneline --graph
17 * 562ec58 (HEAD -> master) merge master and feature
18 |\
19 | * 4f58ab8 (feature) add new func
20 * | 0e80f97 do something
21 |/
22 * 94c134b init base
23
24 解决: 回到合并前,再回到feature分支
25 在feature分支上执行: git rebase master
26 以master为基础,将feature分支上的修改增加到master分支上,并生成新的版本。
27 # 然后解决冲突
28 git add newFunc.go
29 # 现在是重点,之前的rebase其实只是完成了一半,由于出现冲突而终止,现在冲突解决,可以通过git rebase —continue继续完成之前的rebase操作。
30 git rebase --continue
31 git log --oneline --graph
32 * b2593e6 (HEAD -> feature) add new func
33 * 0e80f97 (master) do something
34 * 94c134b init base
35 # 提交记录已经是一条完美的直线。现在切换到主分支master,将feather分支上的提交合并过来。
36 git checkout master
37 git merge feature
38 # 再次查看一下提交历史:
39 git log --oneline --graph
40 * b2593e6 (HEAD -> master, feature) add new func
41 * 0e80f97 do something
42 * 94c134b init base

  git rebase -i

# 开始新的功能分支
git checkout -b new-feature master
# 编辑文件
git commit -a -m "start developing a feature"
# 编辑更多文件
git commit -a -m "fix someting" # 直接在master 上添加文件
git checkout master
# 编辑文件
git commit -a -m "fix security hole" # 开始交互式 rebase
git checkout new-feature
git rebase -i master

  最后的那个命令会打开一个编辑器,包含new-feature的两个,和一些指示:

pick 32618c4 Start developing a feature
pick 62eed47 Fix something from the previous commit

  里面的提示有:

    pick:保留该commit(缩写:p)
    reword:保留该commit,但我需要修改该commit的注释(缩写:r)
    edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
    squash:将该commit和前一个commit合并(缩写:s)
    fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
    exec:执行shell命令(缩写:x)
    drop:我要丢弃该commit(缩写:d)

  你可以更改每个提交前的pick命令来决定在rebase时提交移动的方式,在我们的例子中,我们只需要用squash命令把两个提交并在一起就可以了:

pick 32618c4 Start developing a feature
squash 62eed47 Fix something from the previous commit

  保存并关闭编辑器以开始 rebase。另一个编辑器会打开,询问你合并后的快照的提交信息。在定义了提交信息之后,rebase 就完成了,你可以在 git log 输出中看到那个提交。

git checkout master
git merge new-feature

git rebase -- 能够将分叉的分支重新合并.的更多相关文章

  1. git使用笔记(二)分支与合并

    By francis_hao    Nov 18,2016 查看分支,* 表示当前所在分支 $ git branch 查看分支和最后一次提交记录 $ git branch -v 新建分支 $ git ...

  2. IDEA开发工具使用 git 创建项目、拉取分支、合并分支

    转载自:https://blog.csdn.net/qq_39470733/article/details/80366435 工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下: 假设小组中有 ...

  3. git 使用系列(二)---- 分支和合并

    Branching and Merging The Git feature that really makes it stand apart from nearly every other SCM o ...

  4. git rebase 多分支操作

    - git rebase and git merge 区别 这一次彻底搞懂 Git Rebase - git在工作中正确的使用方式----git rebase篇 Git 操作假设Git目前只有一个分支 ...

  5. 当前分支拉取master的操作 git rebase master

    使用场景 理解rebase 操作步骤 1 git切换至当前开发版本 2 查找需要变基到的branch,不一定是master 3 执行rebase变基 没有冲突的情况 存在冲突的情况 解决冲突 标记冲突 ...

  6. Git rebase命令实战

    一.前言 一句话,git rebase 可以帮助项目中的提交历史干净整洁!!! 二.避免合并出现分叉现象 git merge操作 1.新建一个 develop 分支   2.在develop分支上新建 ...

  7. Git应用详解第九讲:Git cherry-pick与Git rebase

    前言 前情提要:Git应用详解第八讲:Git标签.别名与Git gc 这一节主要介绍git cherry-pick与git rebase的原理及使用. 一.Git cherry-pick Git ch ...

  8. git rebase与 git合并(error: failed to push some refs to)解决方法

    1.遇到的问题 本地有一个git仓库,在github上新建了一个空的仓库,但是更新了REWADME.md的信息,即在github上多了一个提交. 关联远程仓库,操作顺序如下: git remote a ...

  9. git分支的合并

    原文: http://gitbook.liuhui998.com/3_3.html http://gitbook.liuhui998.com/5_3.html 一.如何分支的合并 在git中,可以使用 ...

随机推荐

  1. Django中model的class Meta

    Class Meta 作用:使用内部类来提供一些metadata,以下列举一些常用的meta:1,abstract:如下段代码所示,将abstract设置为True后,CommonInfo无法作为一个 ...

  2. SQLException:The server time zone

    报错信息如下: java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represen ...

  3. docker 镜像位置切换

    发生现象: 在windows10下安装Docker for windows,随着用docker pull image文件后,C盘的容量越来越小了,你可能也有一种跟我一样的想法,想改变默认的安装路径,本 ...

  4. [PowerShell]Python虚拟环境激活失败

    用Activate.ps1激活还是失效的情况下, 用ISE打开发现路径中的中文乱码了. 所以解决方案有两种, 一是把中文路径改成英文 二是把Activate.ps1脚本用记事本打开另存为ANSI编码即 ...

  5. Head First设计模式分析学习

    永不放弃的毅力,和对欲望的控制. 注意:要能够理解相类似的设计模式之间的区别和不同.可以把类比列举出来,加深记忆. 是否加入Spring容器中的标准是是否要用到Spring框架的方法或者功能特性,如事 ...

  6. 工业狗转行AI的心路历程

    2020年2月16日,晴 昨晚下了一场雪,大概是晚上八九点的样子,细碎的雪花在无风的夜里直嗖嗖的往下掉,门前的轿车顶上覆了薄薄的一层.路灯下的小巷格外的寂静,裹着我的睡衣在昏黄的灯光下站了许久,冠状病 ...

  7. Django ORM各种查询

    正向和反向查询 正向 ----> 关联字段在当前表中,从当前表向外查叫正向 反向 —> 关联字段不在当前表中,当当前表向外查叫反向 正向通过字段,反向通过表名查 表结构 from djan ...

  8. Linux7种运行模式

    1)在超级权限下(#)vim /etc/inittab 2)文件内容模式的理解: 0 代表:关机模式(此模式 linux是关机状态) 1 代表:单用户模式(例如root的密码忘记了,可以在该模式下完成 ...

  9. Dockerfile的使用

    一 什么是Dockerfile Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像. 1.对于开发人员:可以为开发团队提供一个完全一致的开发环境: 2.对 ...

  10. centos7.5下yum安装php-5.6.40(LNMP环境)

    cd /etc/yum.repos.d/ yum -y install epel-release #<===安装centos7下php5.6的epel和remi源 rpm -ivh http:/ ...