Git rebase命令使用实战_相关技巧

来源:脚本之家  责任编辑:小易  

git merge是用来合并两个分支的。将b分支合并到当前分支git merge bgit cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我 们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0 中的功能到v2.0中,这里就可以使用cherry-pick了。先在v3.0中查看要合并的commit的commit idgit log假设是 commit f79b0b1ffe445cab6e531260743fa4e08fb4048b切到v2.0中git check v2.0合并commitgit cherry-pick f79b0b1ffe445cab6e531260743fa4e08fb4048bgit rebase有点类似git merge,但是两者又有不同,打个比方,你有两个抽屉A和B,里面都装了衣服,现在想把B中的衣服放到A中,git merge是那种横冲直撞型的,拿起B就倒入A里面,如果满了(冲突)再一并整理;而git rebase就很持家了,它会一件一件的从B往A中加,会根据一开始放入的时间顺序的来加,如果满了你可以处理这一件,你可以继续加,或者跳过这一件,又 或者不加了,把A还原。所以merge适合那种比较琐碎的,简单的合并,系统级的合并还是用rebase吧。专业的区别请移步到这里合并和衍合合并bgit rebase b处理完冲突继续合并git rebase –continue跳过git rebase –skip取消合并git rebase –abortwww.zgxue.com防采集请勿采集本网。

一、前言

此外,也可以使用git merge命令或者git rebase命令,在本地分支上合并远程分支。git merge origin/master#或者 git rebase origin/master上面命令表示在当前分支上,合并origin/master。

  一句话,git rebase 可以帮助项目中的提交历史干净整洁!!!

撤销一个“已公开”的改变 场景:你已经执行了 git push,把你的修改发送到了 GitHub,现在你意识到这些 commit 的其中一个是有问题的,你需要撤销那一个 commit.方法:git revert 原理:git revert

二、避免合并出现分叉现象git merge操作

git rebase 当两个分支不在一条直线上,需要执行merge操作时,使用该命令操作。该命令执行时极有可能显示merge失败,如下图1,使用git diff命令查看冲突内容,手动 修改冲突,git add filename,表示冲突

  1、新建一个 develop 分支

基本上顺序是这2113样的: 你修改好了代码,5261先要提交 至于rebase很容易和merge混淆,因为就结果而言,两条命令是类似的,具体请看 http://git-scm.com/book/zh/ch3-6.html

  

  2、在develop分支上新建两个文件

据说 Git 可以通过 rebase 合并几次提交,最终在历史记录中只留下合并后的那一个。因为我在改一个 bug 的时候中途提交了几次,但最后需要把中间几次提交都取消掉,直接合并最后一次提交上去,

  3、然后分别执行 add、commit、push

  4、接着切换到master分支

  分别添加c.txt 和 d.txt两个文件,分别进行add、commit、push

  5、现在想把develop分支上开发的部分合并到master分支上

  6、git merge 会将master和develop合并的过程通过如下形式展示出来。

  借助 gitk 命令

  借助sourceTree工具

git rebase操作

  如果master和develop分支上的这些开发部分都是同一个人操作,在合并的时候不想产生这种分叉的结果,怎么办呢?

  git-rebase命令简介:用在从上游分支获取最新commit信息,并有机的将当前分支和上游分支进行合并。因为develop分支是在master分支基础上建立的,所以master称为topic的上游分支。

  1、首先通过 git reset 恢复到master合并之前的状态

  2、切换到develop分支,执行如下操作

  3、如果你想把 rebase 之后的 master 分支推送到远程仓库,Git 会阻止你这么做,因为两个分支包含冲突。但你可以传入 –force 标记来强行推送。

  4、查看一下develop分支合并的效果,如下。

  看一下rebase的结果,就像是develop先把自己的提交保存起来,然后将master中的提交合并过来,最后在加上自身分支的提交,这样就不存在分支的合并效果了。

  5、接着切换到master分支,执行git merge 操作就可以了

  这时候,master和develop分支已经同步了。

其他异常情况

  在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index),然后你无需执行 git-commit,只要执行 git rebase --continue。这样git会继续应用(apply)余下的补丁。在任何时候,你可以用--abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。即git rebase --abort。

手动合并多个commit记录

rebase -i 命令介绍

git rebase -i [startpoint] [endpoint]

  其中-i的意思是--interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。

在查看到了log日志后,我们运行以下命令:

git rebase -i 0bb85c 582db9

或者

git rebase -i HEAD~3 

  上面未被注释的部分列出的是我们本次rebase操作包含的所有提交,下面注释部分是git为我们提供的命令说明。每一个commit id 前面的pick表示指令类型,git 为我们提供了以下几个命令:

  pick:保留该commit(缩写:p)

  reword:保留该commit,但我需要修改该commit的注释(缩写:r)

  edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)

  squash:将该commit和前一个commit合并(缩写:s)

  fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)

  exec:执行shell命令(缩写:x)

  drop:我要丢弃该commit(缩写:d)

rebase -i命令执行

  1、git rebase -i HEAD~3

  2、编辑合并信息

  3、修改commit信息

  4、commit信息预览

  5、commit合并结果

  6、可以看到master上之后又1条提交记录了,而develop上还有3个提交记录

  还是要通过 git push -f 命令将合并的commit结果提交的远程仓库中。

  如果develop分支也想要变成master分支这种合并效果,记住不要使用git merge 命令,还时会出现分叉的情况。继续使用 git rebase master命令。

自动合并多个commit记录

命令介绍

  git commit –fixup 自动在commit消息前添加fixup!关键字。

  git rebase -i –autosquash 使用rebase自动合并被标记为fixup!的commit,其实是根据sha值来的。

命令操作

  1.继续修复如下图所示对应的bug

  2、修改完之后执行 git commit --fixup 需要合并的commit id

  3、commit fixup 之后的效果

  4、执行git rebase -i --autosquash 需要合并commit id的父级commit id

    或者

git rebase -i --autosquash commit id^   

  5、执行rebaseautosquash结果

到此这篇关于Git rebase命令使用实战的文章就介绍到这了,更多相关Git rebase命令内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

结果是from_branch的代百码更新到to_branch,同时to_branch的commit log加到度from_branch的最前方。例子:内1.git rebase remotes/main/master MYBRANCH从远程主fork的master分支到本地分容支MYBRANCH进行rebase内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • git pull(拉取)及push(上传)相关命令介绍
  • c#/.net使用git命令行来操作git仓库的方法示例
  • git命令的简单整理大全
  • 分享git常用7大技巧和命令
  • git的简单理解及基础操作命令详解
  • 日常收集整理的git常用命令
  • git 命令行教程及实例教程(附github注册)
  • git pull命令与fetch命令的区别
  • git基本常用命令
  • jquery会死吗?我为什么不用vue写富文本
  • 深度学习开源框架基础算法之傅立叶变换的概要介绍
  • 微信 小程序开发环境搭建详细介绍
  • 网络抓包工具wireshark入门教程详解
  • vscode 云同步扩展设置settings sync插件
  • i++循环与i-–循环的执行效率(递增与递减效率)
  • 在vscode中创建你的代码模板的方法
  • 从console.log说起(console.log详细介绍)
  • textarea 在ie和ff下换行无法正常显示的解决方法
  • 完美解决webstorm启动索引文件卡死的问题
  • git rebase 解决完冲突执行什么命令
  • git命令之git merge 和 git rebase的区别
  • 怎么删除rebase branch中的git root
  • 怎么merge 两个不同的仓库,顺带讲git rebase 怎么用
  • 什么时候用git feach命令
  • 怎么撤销git rebase的操作
  • git reset rebase和 revert的区别
  • Git push,merge,pull,fetch,rebase各自在什么场景下使用
  • Git 怎么用 rebase 合并几个 commit
  • 如何用简单的语言解释git的基础命令
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全javascriptasp.netphp编程ajax相关正则表达式asp编程jsp编程编程10000问css/htmlflex脚本加解密web2.0xml/rss网页编辑器相关技巧安全相关网页播放器其它综合dart首页git pull(拉取)及push(上传)相关命令介绍c#/.net使用git命令行来操作git仓库的方法示例git命令的简单整理大全分享git常用7大技巧和命令git的简单理解及基础操作命令详解日常收集整理的git常用命令git 命令行教程及实例教程(附github注册)git pull命令与fetch命令的区别git基本常用命令jquery会死吗?我为什么不用vue写富文本深度学习开源框架基础算法之傅立叶变换的概要介绍微信 小程序开发环境搭建详细介绍网络抓包工具wireshark入门教程详解vscode 云同步扩展设置settings sync插件i++循环与i-–循环的执行效率(递增与递减效率)在vscode中创建你的代码模板的方法从console.log说起(console.log详细介绍)textarea 在ie和ff下换行无法正常显示的解决方法完美解决webstorm启动索引文件卡死的问题2019最新的pycharm激活码(推荐)进制转换算法原理(二进制 八进制eclipse 格式化代码时不换行与自微信小程序设置http请求的步骤详几款开源的中文分词系统十进制负数转换为二进制、八进制从console.log说起(console.log详url 长度有限制吗?git 撤销操作、删除文件和恢复文vscode常用知识小结2013年cio需要知道的八句格言文章中优酷视频全屏及去除广告在线转换为什么使用框架 使用框架的优缺点windows下git安装教程(图文)vscode自定义配色方案的实现如何禁止浏览器使用后退按钮功能websocket部署到服务器出现连接失败问题的浅析hosts 文件的作用及修改 hosts 文件的使用vscode写一个html页面
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved