这个命令大体作用就是对本地的commit进行修改,适用于以下情况:

  1. 本地历史排查修改
  2. code review后,打回修改

详解

  • pick,只是意味着包括提交。重新进行命令时,重新安排pick命令的顺序会更改提交的顺序。如果选择不包括提交,则应删除整行。
  • reword,该命令与相似pick,但是使用后,重新设置过程将暂停并为您提供更改提交消息的机会。提交所做的任何更改均不受影响。
  • edit,如果您选择edit提交,则将有机会修改提交,这意味着您可以完全添加或更改提交。您还可以进行更多提交,然后再继续进行变基。这使您可以将大型提交拆分为较小的提交,或者删除在提交中所做的错误更改。
  • squash,该命令使您可以将两个或多个提交合并为一个提交。提交被压缩到其上方的提交中。Git使您有机会编写描述这两个更改的新提交消息。
  • fixup,这类似于squash,但是要合并的提交已丢弃其消息。提交仅合并到其上方的提交中,并且较早提交的消息用于描述这两个更改。
  • exec,这使您可以对提交运行任意的Shell命令。

测试

git init

touch base.txt
git add .
git commit -m "add base" touch 1.txt
git add .
git commit -m "add 1" touch 2.txt
git add .
git commit -m "add 2" touch 3.txt
git add .
git commit -m "add 3" touch 4.txt
git add .
git commit -m "add 4" touch 5.txt
git add .
git commit -m "add 5"

git log

commit a75ed742838ebc1ef1073502623478f73e1ec21f
Author:
Date: Wed Mar 4 10:02:51 2020 +0800 add 5 commit 8b485bb4768b2abf8f6400dcba069f1a650ed5ec
Author:
Date: Wed Mar 4 09:59:27 2020 +0800 add 4 commit 63ce9fb010da550c668aca66758c45fbfad46e2b
Author:
Date: Wed Mar 4 09:59:04 2020 +0800 add 3 commit 9cd34c4d42f52cfb40026dae613c8ad29d7cbc66
Author:
Date: Wed Mar 4 09:58:45 2020 +0800 add 2 commit 77bd0eb1a97e1676367ea236c1c47c155eaa8430
Author:
Date: Wed Mar 4 09:58:23 2020 +0800 add 1 commit 443sdafdsafgdf123123dfh234546gjnhbjh344
Author:
Date: Wed Mar 4 09:58:23 2020 +0800 add base

上手

先手内容

git rebase -i HEAD~2 这里的git rebase-i HEAD~为常用命令,后面的2为倒叙git log的几个提交

比如git rebase -i HEAD~2,命令行当进入vim模式,并显示:

pick a75ed74 add 5
pick 8b485bb add 4

修改为

pick a75ed74 add 5

保存则删除add 4的commit

pick,对commit进行排序或删除

通过git rebase -i HEAD~n后,对每行进行删除或上下替换位置即可充值commit顺序或删除。

record,对提交commit的message进行修改

输入git rebase -i HEAD~3,进入vim如下:

pick 9cd34c4 add 2
pick 63ce9fb add 3
pick 575fd8b add 5

将第一行pick换成recordr,这里rrecord简写,二者没有差异

r 9cd34c4 add 2
pick 63ce9fb add 3
pick 575fd8b add 5

保存后会进入vim如下:

add 2

对这个修改为

add 2 ~ new commit

保存退出,使用git log

add 2 ~ new commit

edit,修改提交的代码

  • 场景一,需要在某两个提交间,穿插一个提交做个事情

git rebase -i HEAD~2

pick 6934312 add 3
pick 5ce6dde add 5

改为

e 6934312 add 3
pick 5ce6dde add 5

保存后终端显示以下两个关键句

git commit --amend
git rebase --continue

--amend为把修改add后添加到当前的提交上

--contine表示不做处理,继续下一个提交

比如此时我们vim 3.txt并追加内容edit test到3.txt文件中,并保存。

git add 3.txt
git commit -m 'new edit 3.txt'
git rebase --continue

此时的git log

add 5.txt
new edit 3.txt
add 3.txt
  • 场景二,需要在某两个提交间,穿插一个提交做个事情,但是不新增提交

git rebase -i HEAD~2

pick 6934312 add 3
pick 5ce6dde add 5

改为

e 6934312 add 3
pick 5ce6dde add 5
git add 3.txt
git commit --amend

此时的git log

add 5.txt
add 3.txt

此时修改归到了add 3.txt这个提交中

squash,合并变更到一个commit中

git rebase - i HEAD~2

输出

pick 6934312 add 3
pick 6fa47e4 add 5
pick 6934312 add 3
s 6fa47e4 add 5

进入vim

add 3

add 5

内容修改为

add 3 & add 5

git log

add 3 & add 5
add 2
add 1
add base

fixup,类似squash,不过是直接弃用对应的提交,将变更直接合并到更早的提交,不建议用,除非很熟练

git rebase -i HEAD~2

pick 311adc9 add 1
pick 7f9d45d add 2 ~ new comment

改为

pick 311adc9 add 1
s 7f9d45d add 2 ~ new comment

git log

add 1
add bash

exec,执行shell命令,没发现有什么实际用途目前(针对开发)

git rebase -i HEAD~2

add 1.txt

改为

exec echo "Hello World"
add 1.txt

保存

Executing: echo "Hello World"
Hello World

drop,直接删除某个提交

pick删除一样,pick是删除这一行,drop是使用命令描述删除这一行的提交

修改历史提交用户

git commit --amend --author "Iron <iron.yehong@outlook.com>" --no-edit

git rebae -i的更多相关文章

  1. Git 命令收集

    目录 1.清理恢复 2.回滚,reset与revert的区别 3.merge,rebase,cherry-pick区别 4.删除不存在对应远程分支的本地分支 5.git pull,git push 报 ...

  2. Git工作流:中心工作流(翻译)

    使用Git作为版本控制器,有众多可能的工作流(Workflow),这使得我们这些新鸟不知道在实际工作中不知道该选择哪种工作流.这里我们对最常见的Git工作流做一个对比,为企业团队提供一个参考. 正如你 ...

  3. Git 子模块 - submodule

    有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...

  4. Git 在团队中的最佳实践--如何正确使用Git Flow

    我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...

  5. Git与Repo入门

    版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文 ...

  6. Git Bash的一些命令和配置

    查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...

  7. 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net

    1. 注册一个账号和创建项目 先在git.oschina.net上注册一个账号和新建一个project ,如project name 是"myTest". 2.安装git sudo ...

  8. 史上最详细git教程

    题外话 虽然这个标题很惊悚,不过还是把你骗进来了,哈哈-各位看官不要着急,耐心往下看 Git是什么 Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别 SVN是集中式版本控制 ...

  9. [版本控制之道] Git 常用的命令总结(欢迎收藏备用)

    坚持每天学习,坚持每天复习,技术永远学不完,自己永远要前进 总结日常开发生产中常用的Git版本控制命令 ------------------------------main-------------- ...

  10. 【解决方案】Myeclipse 10 安装 GIT 插件 集成 步骤 图解

    工程开发中,往往要使用到集成GIT ,那么下面说说插件安装步骤 PS:以Myeclipse 10 为例,讲解集成安装步骤. ----------------------main------------ ...

随机推荐

  1. [ARC 188A] ABC Symmetry

    solution by XiangXunYi 思路推导 step 1 首先题目中操作二同时删掉 A,B,C 的条件相当于同时将三者数量减一,操作一删掉两个相同字符等同于将某一字符的数量减二,那么我们可 ...

  2. 斩获“年度突破成果”奖!天翼云构建强大AI算力基础,制胜人工智能新时代

    8月18-19日,2023中国算力大会在宁夏银川举办.在大会"年度突破成果"发布环节,中国电信天翼云<基于异构多云环境下的息壤算力调度应用实践>荣获2023中国算力大会 ...

  3. "最新"部署幻兽帕鲁游戏服务器及开局经验分享

    Banner 2024,<幻兽帕鲁><雾锁王国>等游戏爆火!那么如何快速拥有一个可以跟小伙伴们愉快玩耍的服务器呢?社区里不少小伙伴已经给出了自己的最佳实践,你甚至不需要懂技术, ...

  4. windows的恶意代码自定义

    代码执行步骤: 1,新建"文本文档" 2,输入代码 3,@echo off format C: /q/u/y 4,保存"文本文档" 文本文档.txt改为.bat ...

  5. Python 潮流周刊#89:Python 3.14 的新型解释器!(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  6. ESP8266+AT指令,使用MQTT协议连接阿里云

    AT指令集 AT+CWMODE=1 AT+CWJAP="热点名","热点密码" AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com& ...

  7. 莫托曼机器人GP110B操作手柄故障维修全攻略

     莫托曼机器人GP110B操作手柄故障机器人维修全攻略              一.前言              莫托曼机器人GP110B操作手柄是机器人控制系统的重要组成部分,它允许操作人员对机 ...

  8. 什么是A型或者B型剩余电流保护器?

    我国的剩余电流保护装置(RCD)指导性标准GB/Z 6829-2008(IEC/TR 60755:2008,MOD)<剩余电流动作保护器的一般要求> 从产品的基本结构.剩余电流类型.脱扣方 ...

  9. Linux - centos6忘记root密码怎么办?

    Linux的root密码修改不像Windows的密码修改找回,Windows的登录密码忘记需要介入工具进行解决.CentOS6和CentOS7的密码方法也是不一样的,具体如下 1.开机按esc   2 ...

  10. 基于Openframeworks调取摄像头方式的定时抓拍保存图像方法小结

    这次是采用Openframeworks来调取摄像头画面并抓图保存. 开始 借向导自动生成代码,因为要调取摄像头设备,因此增添ofVideoGrabber对象声明,又因为保存需求,所以还需添加ofPix ...