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中,可以使用 ...
随机推荐
- 如何从Serilog请求日志记录中排除健康检查终结点
这是在ASP.NET Core 3.X中使用Serilog.AspNetCore系列文章的第四篇文章:. 第1部分-使用Serilog RequestLogging减少日志详细程度 第2部分-使用Se ...
- Spring注解开发系列专栏
这个系列主要是讲Spring注解的使用,可以为后面SpringBoot的学习带来一定的帮助.我觉得从Spring直接过度到SpringBoot还是有点快,还是得需要一个演变的过程.从Spring开发, ...
- 理解numpy中ndarray的内存布局和设计哲学
目录 ndarray是什么 ndarray的设计哲学 ndarray的内存布局 为什么可以这样设计 小结 参考 博客:博客园 | CSDN | blog 本文的主要目的在于理解numpy.ndarra ...
- vue简介,插值表达式,过滤器
目录 VUE框架介绍 what?什么是vue? why?为什么要学习vue? special特点? how如何使用? 下载安装? 导入方式? 挂在点el 插值表达式 delimiters自定义插值表达 ...
- FFMPEG结构体分析:AVCodecParameters
/** * This struct describes the properties of an encoded stream. * * sizeof(AVCodecParameters) is no ...
- 情人节到了,Postman 都脱单了,那你咧?
前言 Postman 是一款API接口调试工具,做过 Web 接口或多或少应该接触过. 通过它可以完成 Http 接口的调试,测试同学也可以基于此做一些自动化测试.另外 Postman 还提供其他高级 ...
- 套接字名与DNS
2 现代地址解析 首先要说Python套接字最强大的工具之一-------getaddrinfo() 这个函数可能是我们用来将用户指定的主机名和端口号转换为可供套接字方法使用的地址时所需的唯一方法. ...
- hadoop 日常使用记录
1.Hadoop分布式文件系统(HDFS) HDFS基于GFS(Google File System),能够存储海量的数据,并且使用分布式网络客户端透明访问. HDFS中将文件拆分成特定大小的块结构( ...
- 《N诺机试指南》(三)STL使用
1.vector 2.queue 3.stack 4.map 5.set 6.多组输入输出问题 详解见代码以及注释: //学习STL的使用 #include <bits/stdc++.h> ...
- RocketMQ重试机制和消息幂等
一.重试机制 由于MQ经常处于复杂的分布式系统中,考虑网络波动,服务宕机,程序异常因素,很有可能出现消息发送或者消费失败的问题.因此,消息的重试就是所有MQ中间件必须考虑到的一个关键点.如果没有消息重 ...