git rebae -i
这个命令大体作用就是对本地的commit进行修改,适用于以下情况:
- 本地历史排查修改
- 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换成record或r,这里r为record简写,二者没有差异
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的更多相关文章
- Git 命令收集
目录 1.清理恢复 2.回滚,reset与revert的区别 3.merge,rebase,cherry-pick区别 4.删除不存在对应远程分支的本地分支 5.git pull,git push 报 ...
- Git工作流:中心工作流(翻译)
使用Git作为版本控制器,有众多可能的工作流(Workflow),这使得我们这些新鸟不知道在实际工作中不知道该选择哪种工作流.这里我们对最常见的Git工作流做一个对比,为企业团队提供一个参考. 正如你 ...
- Git 子模块 - submodule
有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...
- Git 在团队中的最佳实践--如何正确使用Git Flow
我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...
- Git与Repo入门
版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文 ...
- Git Bash的一些命令和配置
查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...
- 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net
1. 注册一个账号和创建项目 先在git.oschina.net上注册一个账号和新建一个project ,如project name 是"myTest". 2.安装git sudo ...
- 史上最详细git教程
题外话 虽然这个标题很惊悚,不过还是把你骗进来了,哈哈-各位看官不要着急,耐心往下看 Git是什么 Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别 SVN是集中式版本控制 ...
- [版本控制之道] Git 常用的命令总结(欢迎收藏备用)
坚持每天学习,坚持每天复习,技术永远学不完,自己永远要前进 总结日常开发生产中常用的Git版本控制命令 ------------------------------main-------------- ...
- 【解决方案】Myeclipse 10 安装 GIT 插件 集成 步骤 图解
工程开发中,往往要使用到集成GIT ,那么下面说说插件安装步骤 PS:以Myeclipse 10 为例,讲解集成安装步骤. ----------------------main------------ ...
随机推荐
- Python 潮流周刊#87:媲美 OpenAI-o1 的开源模型(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- PostgreSQL:数据库迁移与版本控制
title: PostgreSQL:数据库迁移与版本控制 date: 2025/2/6 updated: 2025/2/6 author: cmdragon excerpt: 在现代软件开发中,数据库 ...
- “天翼云息壤杯”高校AI大赛福建赛区启动!
11月20日,2024首届全国"天翼云息壤杯"高校AI 大赛(福建赛区)正式启动.中国电信福建公司携手华为公司.福建省计算机学会.福建省自动化学会,正式启动天翼云科技有限公司承办的 ...
- NSSM:简化Windows服务配置,提升系统维护效率
NSSM:简化Windows服务配置,提升系统维护效率 在Windows系统环境中,服务的配置与管理是一项复杂而重要的任务.传统的服务管理方式往往涉及繁琐的步骤,不仅效率低下,还容易出错.然而,随着N ...
- Kali 配置Proxychains4
Kali 配置Proxychains4 Proxychains4 是一款在 Linux 系统中广泛使用的代理工具,其全称为 ProxyChains.作为一款代理切换软件,Proxychains4 能够 ...
- 表治理-Iceberg元数据合并-metadata.json文件
一.背景描述 元数据文件随时间增多,导致查询变慢.通过如下方式可以指定metadata个数,超过指定数量自动清理. metadata文件对应Iceberg概念是Snapshots 二.解决方案 1.在 ...
- 正则表达式匹配邮箱,IP地址,URL
参考链接: http://urlregex.com/ 1. 邮箱匹配正则表达式 C# ^(?(")(".+?(?<!\\)"@)|(([0-9a-z]((\.(?! ...
- kubesphere应用系列(一)部署NET8API
一.准备工作 1.kubesphere 2.harbor 3.net8 二.创建API应用 1.创建api应用 1.1使用命令创建应用 dotnet new webapi -n YourApiAppN ...
- C51基础知识总览
- 数字先锋 | 天翼云xDeepSeek,赋能东莞开启智慧政务新篇章!
人工智能浪潮奔涌 DeepSeek堪称"全能战士" 在各行各业疯狂"上分" 特别是在政务领域 其以强大的智能问答 公文写作.数据分析等能力 为政务服务按下了&q ...