Git rebase

git original log:

目前有多于三个的log,而我想要合并最近的两个 log, 也就是上图中紫色的圈和黄色的圈,所以这个时候使用rebase的方式如下:

git    rebase   -i   ee9ee598ea2a4bece9b23

注意这个时候的应该使用的log的编码是红色的圈,虽然我想要合并紫色和黄色,但是需要在红色圈的基础上进行合并,所以需要填入ee9ee598

填完之后,需要对log进行重新选择,

pick 82b5047  Changes for MapLoad (changed InitKeyFrame for EUCM based on ORI_Ver)
pick eddaa2b  Load Map
# Rebase a71eba2..e1a7dfa onto a71eba2
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

这个文件中的log是按照提交的时间顺序来的,提交的时间最早的log,就会在 出现在 最上面,这样给了我们更清楚的知识,究竟保留哪个,去掉哪个?

pick即为保留的意思,如果pick某个hash,那个这一次提交的代码修改将会被保存;

squash表示那一次的提交内容将会和它的上一个log合并到一起;squash很适用于那种commit完成后发现自己没有add全的情况;

reword表示当前的commit记录会被保留,但是允许你修改commit的comment,使用与commit -m ”“ 时写错log的情况;

fixup就更彻底了,会将当前的提交代码与上一次的提交合并到一起,同时直接删除掉当前的log message,跟在下面图2的文件中注释掉其实是一样的效果;

一般情况下,squash是最常用的,即保留文件中的修改和commit的提交,只是将这次的commit与上一次的合并而已,所以需要将上述文件修改成:

pick 82b5047  Changes for MapLoad (changed InitKeyFrame for EUCM based on ORI_Ver)
s eddaa2b  Load Map 

然后ctrl+x 离开,其中会提示是否需要保存,选择YES即可;

然后会遇到如下文件:

这个文件主要是需要选择新的commit 的comment,也就是log message内容,如果不想要什么可以直接用#把他们注释掉,

因为我合并和紫色和黄色的两个圈圈log,并且觉得黄色圈圈的log内容更加准确,所以,就选择留下第三行的文字;

那么最后合并后的log内容为

从如上的合并可以看出,红色的圈圈没变,但是紫色圈圈和黄色圈圈都不存在了,而合并成立绿色圈圈,同时绿色圈圈的commit 内容选用了紫色圈圈的内容;

更多理论参考:

https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA

【讲清楚】rebase的使用相关推荐

  1. rebase interactive

    执行 git rebase --interactive 时 pick: 保留commit以及commit信息 reword: 可编辑该commit的信息(且不与其他commit合并) squash: ...

  2. 程序员如何讲清楚技术方案

    最近在评审技术方案,和代码review的时候,遇到刚入行的同学们,很多都讲不清楚技术方案. 具体表现是: – 上来不说需求,直接说算法实现.台下一头雾水,根本不知道设计方案是否合理. – 描述完需求后 ...

  3. git rebase 和 git merger

    & git merge 在上图中,每一个绿框均代表一个commit.除了c1,每一个commit都有一条有向边指向它在当前branch当中的上一个commit. 图中的项目,在c2之后就开了另 ...

  4. 这么多年,终于有人讲清楚Transformer了

    作者 | Jay Alammar 译者 | 香槟超新星,责编 | 夕颜 来源 | CSDN(ID:CSDNnews) 注意力机制是一种在现代深度学习模型中无处不在的方法,它有助于提高神经机器翻译应用程 ...

  5. 合并代码还在用git merge吗?我们都用git rebase!

    欢迎关注方志朋的博客,回复"666"获面试宝典 git merge 和 git rebase的区别 目的都是将一个分支的 commit 合并到到另外一个分支中去. git merg ...

  6. Git Merge VS Rebase

    首先要明白的是 git rebase 可以用来解决和 git merge 一样的问题,两个命令都是被设计出来将一个分支的改变合并到另一个分支里,只是两者的实现方式截然不同而已. 原文链接: https ...

  7. Git 2.9增加了Merge、Rebase、Commit等新特性

    Git 2.9版本已于近期发布.它给merge.rebase和commit工作流带来了新的特性,以及许多其他方面的改进和缺陷修复. \\ Git merge和pull的命令将不允许两个不相关历史的分支 ...

  8. git merge 和 git rebase详解

    git merge 和 git rebase 都是用来合并两个分支的. git merge b   #把b分支合并到当前分支 git rebase b   #把b分支合并到当前分支 --------- ...

  9. Git工作流程和rebase与合并问题

    我和其他开发人员一起在一个项目上使用Git几个月了. 我有几年的SVN经验,所以我想我给这段关系带来了很多包袱. 我听说Git非常适合分支和合并,到目前为止,我只是没有看到它. 当然,分支很简单,但是 ...

最新文章

  1. ffmpeg+mencoder环境搭建和视频处理总结
  2. git checkout .的用法
  3. java8中的Lamba表达式
  4. PHP 将二叉查找树转换为双向链表,要求不能创建新节点,只能调节节点指针
  5. python tuple类型和list_Python 04_List 和 Tuple 类型
  6. php lalaogu cn,php安装编译时错误合集
  7. 机器学习知识点(十)马尔可夫链
  8. 每天一道LeetCode-----判断给定字符串是否符合某个模式
  9. 奇妙的安全旅行之RSA算法
  10. OpenEIM 从天上飘落下来
  11. 信息学奥赛C++语言: 抽奖1
  12. 【安全牛学习笔记】COCAT
  13. 白素雅 中国科学院大学 计算机应用技术,张玉清 - 中国科学院大学 - 计算机科学与技术学院...
  14. Telerik UI for Xamarin使用教程 - AndroidX使用指南
  15. 1 微信如何搜索附近的人?
  16. 社会工程学+Web hacked***某游戏公司
  17. 2020 mse 清华_家长们看过来!2020年下半年剑桥MSE考试备考全攻略!
  18. Jenkins - Update information obtained: 不可用 ago;
  19. Air Jordan 32 Performance Review
  20. 高斯白噪声及Matlab常用实现方法

热门文章

  1. 图像修复:Object Removal by Exemplar-Based Inpainting 学习笔记
  2. 前端页面优化和SEO
  3. 洛谷noip 模拟赛 day1 T3
  4. 在解决prob中遇到的prob...
  5. iTab新标签页,一款个性化的浏览器起始页插件
  6. 机器人三大定律的发展和演进概述
  7. signature=6846357f033a668e61dd424f68d4d1c2,Wybrane aspekty zwinności organizacyjnej
  8. RTX51tiny 复杂应用---时钟、温度显示、按键解析
  9. javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
  10. 深度学习入门笔记(十五):深度学习框架(TensorFlow和Pytorch之争)