git rebase -- 能够将分叉的分支重新合并.
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 -- 能够将分叉的分支重新合并.的更多相关文章
- git使用笔记(二)分支与合并
By francis_hao Nov 18,2016 查看分支,* 表示当前所在分支 $ git branch 查看分支和最后一次提交记录 $ git branch -v 新建分支 $ git ...
- IDEA开发工具使用 git 创建项目、拉取分支、合并分支
转载自:https://blog.csdn.net/qq_39470733/article/details/80366435 工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下: 假设小组中有 ...
- git 使用系列(二)---- 分支和合并
Branching and Merging The Git feature that really makes it stand apart from nearly every other SCM o ...
- git rebase 多分支操作
- git rebase and git merge 区别 这一次彻底搞懂 Git Rebase - git在工作中正确的使用方式----git rebase篇 Git 操作假设Git目前只有一个分支 ...
- 当前分支拉取master的操作 git rebase master
使用场景 理解rebase 操作步骤 1 git切换至当前开发版本 2 查找需要变基到的branch,不一定是master 3 执行rebase变基 没有冲突的情况 存在冲突的情况 解决冲突 标记冲突 ...
- Git rebase命令实战
一.前言 一句话,git rebase 可以帮助项目中的提交历史干净整洁!!! 二.避免合并出现分叉现象 git merge操作 1.新建一个 develop 分支 2.在develop分支上新建 ...
- Git应用详解第九讲:Git cherry-pick与Git rebase
前言 前情提要:Git应用详解第八讲:Git标签.别名与Git gc 这一节主要介绍git cherry-pick与git rebase的原理及使用. 一.Git cherry-pick Git ch ...
- git rebase与 git合并(error: failed to push some refs to)解决方法
1.遇到的问题 本地有一个git仓库,在github上新建了一个空的仓库,但是更新了REWADME.md的信息,即在github上多了一个提交. 关联远程仓库,操作顺序如下: git remote a ...
- git分支的合并
原文: http://gitbook.liuhui998.com/3_3.html http://gitbook.liuhui998.com/5_3.html 一.如何分支的合并 在git中,可以使用 ...
随机推荐
- Linux中inode详解
转自:https://www.cnblogs.com/itech/archive/2012/05/15/2502284.html 一.inode是什么? 理解inode,要从文件储存说起. 文件储存在 ...
- .NET Core学习笔记(4)——谨慎混合同步和异步代码
原则上我们应该避免编写混合同步和异步的代码,这其中最大的问题就是很容易出现死锁.让我们来看下面的例子: private void ButtonDelayBlock_Click(object sende ...
- Arduino系列之LCD1602模块使用方法(一)
下面我将简单介绍LCD1602模块的使用方法: 1602液晶显示器(1602 Liquid Crystal Display,此后简称1602 LCD)是一种常见的字符液晶显示器,因其能显示16*2个字 ...
- vue-父组件向子组件传值
一.父组件向子组件传值 其实该问题是说子组件如何访问父组件的属性和方法?那么根据对组件化的理解,无非就是要解决两个问题: 1.父组件如何将值传给子组件? 2.子组件如何获取父组件传递过来的值? 解读v ...
- linux中rz、rs命令无法执行的情况
执行如下安装命令: yum install -y lrzsz
- Codeforces 1156E Special Segments of Permutation(启发式合并)
题意: 给一个n的排列,求满足a[l]+a[r]=max(l,r)的(l,r)对数,max(l,r)指的是l到r之间的最大a[p] n<=2e5 思路: 先用单调栈处理出每个点能扩展的l[i], ...
- MongoDB、Redis和Memcached介绍
MongoDB MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非 ...
- 青石巷-小L的爸爸
小L有一个和谐的家. 爸爸具体职业不明,在统战部工作,刚开始和妈妈在一起工作. 妈妈是个会跳舞的语文老师. 奶奶之前也是个老师. 爷爷是个建筑师. 爸爸是最有文采的一个.在小L看来,他的一言一行,一举 ...
- 「硬核干货」总结IDEA开发的26个常用设置
前言 程序员对待IDE都是虔诚的,经常因为谁是最好的IDE而在江湖上掀起波澜,曾经我也是. 后来我遇到了IDEA,从此是它,余生都是它. IDEA 毫无疑问是目前最强大的Java开发工具了,但是大部分 ...
- JAVA体系结构简单介绍
JAVA 体系结构包括四个独立但相关的技术: java程序设计语言 java class 文件格式 JAVA应用编程接口(API) JAVA虚拟机(JVM) 当编写运行一个java程序时,就同时体验了 ...