rebase交互式变基

news/2024/11/15 5:56:46/

变基时可用的命令

变基时有六个命令可用:

  • pick

pick只表示包含提交。 在变基进行时重新排列pick命令的顺序会更改提交的顺序。 如果选择不包含提交,应删除整行。

  • reword

reword命令类似于pick,但在使用后,变基过程就会暂停,让你有机会改变提交消息。 提交所做的任何更改都不受影响。

  • edit

如果选择 edit提交,你将有机会修订提交,也就是说,可以完全添加或更改提交。 您也可以创建更多提交后再继续变基。 这样您可以将大提交拆分为小提交,或者删除在提交中执行错误更改。

  • squash

此命令可用于将两个或以上的提交合并为一个。 下面的提交压缩到其上面的提交。 Git 让您有机会编写描述两次更改的新提交消息。

  • fixup

这类似于 squash,但要合并的提交丢弃了其消息。 提交只是合并到其上面的提交,之前提交的消息用于描述两次更改。

  • exec

这可让您对提交运行任意shell命令。

更改提交顺序

pick只是意味着包括提交。重新进行命令时,重新安排pick`命令的顺序会更改提交的顺序。如果选择不包括提交,则应删除整行。
我们先看一下当前提交的信息

![image.png](https://img-blog.csdnimg.cn/img_convert/88db23f347136ff423a7a6c7cfe1f1d7.png#averageHue=#fcfbfa&clientId=ue32db35e-e55b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=403&id=u76e82b3c&margin=[object Object]&name=image.png&originHeight=605&originWidth=1177&originalType=binary&ratio=1&rotation=0&showTitle=false&size=66994&status=done&style=none&taskId=ued0577d7-4093-43f2-bdbc-49d99caee39&title=&width=784.6666666666666)

现在我们要改变一下bd两次提交的顺序,HRAD~2表示选择离HEAD最近的3次提交。

git rebase -i HEAD~3

接着git会弹出一个文本,
在这里插入图片描述

下面就是vim操作了,只要交换第一行和第三行的位置就行,把光标移动到第一行快速按两下d键第一行就被剪切到剪切板中了,再把光标移动到d提交那行按下p就把刚才剪切的内容粘贴过来了,像这样操作把191bc18那次提交移动到第一行就行了,按下shift + :输入wq保存退出。
输入git log查看提交信息顺序改变了。
在这里插入图片描述

删除提交

比如我们要删除提交信息为c的那次提交,先看一下当前
在这里插入图片描述

HEAD~2距离HEAD最近的两次提交

git rebase -i HEAD~2

只要删除提交信息为c的那行就行了。
在这里插入图片描述
保存后输入git log查看结果
在这里插入图片描述

record 修改提交消息(提交内容不变)

如果我们要修改b的那次提交的commit信息,可以使用record来修改commit信息,输入git log先看一下现在的commit是什么。
在这里插入图片描述

c37146f7可以快速定位到c37146f7 后面提交的地方,但是列出的不包括指定的提交。

git rebase -i c37146f7

pack定改为r,r是 record简写。
在这里插入图片描述

接着Esc,shift + ;``wq 保存退出,git会弹出一个文本编辑器在第一行修改文本描述。
在这里插入图片描述

修改完成后保存退出,输入git log查看commit信息。
在这里插入图片描述

edit修改提交

使用edit可以完全添加或更改提交。您还可以进行更多提交,然后再继续进行变基。这使您可以将大型提交拆分为较小的提交,或者删除在提交中所做的错误更改。
如果在3d06118cf18b62266之间在添加一个提交要怎么做呢,
显示到HEAD最近到两次提交

git rebase -i HEAD~2
pick c37146f d
pick 3d06118 修改commit b# Rebase f18b622..3d06118 onto f18b622 (2 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit

c37146f前面的pick修改为e,保存并退后后git会输出一下内容

Stopped at c37146f...  d
You can amend the commit now, withgit commit --amendOnce you are satisfied with your changes, rungit rebase --continue

此时可以看到master变成了(master|REBASE 1/2)
新建一个c.txt文件并提交。

git add c.txt
git commit -m "c"
[detached HEAD c66dc69] c1 file changed, 1 insertion(+)create mode 100644 c.txt

接着继续rebase

git rebase --continue
Successfully rebased and updated refs/heads/master.

再次查看一下提交记录

git logcommit 2fc98daaf7552d7dbc8e9c078ad205026344674f (HEAD -> master)
Author: you <youemail@outlook.com>
Date:   Thu Sep 8 13:13:35 2022 +0800修改commit bcommit c66dc69744c255f4827da269e92d8228f8ebd737
Author: you <youemail@outlook.com>
Date:   Fri Sep 9 10:26:37 2022 +0800ccommit c37146f70d8cc1632f818d2ea013a34550a1c792
Author: you <youemail@outlook.com>
Date:   Thu Sep 8 13:13:43 2022 +0800dcommit f18b62266b664cd3228bd332f81a32dcd6a1ad1f
Author: you <youemail@outlook.com>
Date:   Thu Sep 8 13:13:30 2022 +0800a

如果我们只想修改提交的内容,不添加commit要怎么办
参考上面的步骤在提交时加一个参数git commit --amend这样就不会多一个commit了。

git add c.txt
git commit --amend
>
Successfully rebased and updated refs/heads/master.

squash合并提交

squash可以将两个或多个commit合并到一个commit中,被合并的commit会压缩到上一次的commit中,还可以更改这两个commit合并后新的commit信息。
如果我们要合并e78c2233437126要怎么做呢,先看一下当前的提交信息

Author: you <youemail@outlook.com>
Date:   Thu Sep 8 13:13:35 2022 +0800修改commit bcommit 34371265e7df46cd5b877339ad4d1b3a4d8a315e
Author: you <youemail@outlook.com>
Date:   Fri Sep 9 10:26:37 2022 +0800ccommit c37146f70d8cc1632f818d2ea013a34550a1c792
Author: you <youemail@outlook.com>
Date:   Thu Sep 8 13:13:43 2022 +0800dcommit f18b62266b664cd3228bd332f81a32dcd6a1ad1f
Author: you <youemail@outlook.com>
Date:   Thu Sep 8 13:13:30 2022 +0800a
(END)
git rebase - i HEAD~2
>
pick 3437126 c
pick e78c223 修改commit b# Rebase c37146f..e78c223 onto c37146f (2 commands)
#
# Commands:
# p, pick <commit> = use commit
...

因为需要将e78c223合并到他的上次提交,需要把e78c223前面的pick改为s

git rebase - i HEAD~2
>
pick 3437126 c
s e78c223 修改commit b# Rebase c37146f..e78c223 onto c37146f (2 commands)
#
# Commands:
# p, pick <commit> = use commit
...

保存并退出,git会弹出新的文本框

# This is a combination of 2 commits.
# This is the 1st commit message:c# This is the commit message #2:修改commit b# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.

修改commit信息

# This is a combination of 2 commits.
# This is the 1st commit message:新的commit c# This is the commit message #2:新的commit 修改commit b# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.

保存并退出,变基完成

git log
>
commit 88a2a47912f3fe643d486739b000dfae776ed493 (HEAD -> master)
Author: you <youeamil@outlook.com>
Date:   Fri Sep 9 10:26:37 2022 +0800新的commit c新的commit 修改commit bcommit c37146f70d8cc1632f818d2ea013a34550a1c792
Author: you <youeamil@outlook.com>
Date:   Thu Sep 8 13:13:43 2022 +0800dcommit f18b62266b664cd3228bd332f81a32dcd6a1ad1f
Author: you <youeamil@outlook.com>
Date:   Thu Sep 8 13:13:30 2022 +0800a

常看commit修改 git show 88a2a47

git show 88a2a47
>
commit 88a2a47912f3fe643d486739b000dfae776ed493 (HEAD -> master)
Author: you <youemail@outlook.com>
Date:   Fri Sep 9 10:26:37 2022 +0800新的commit c新的commit 修改commit bdiff --git a/b.txt b/b.txt
new file mode 100644
index 0000000..63d8dbd
--- /dev/null
+++ b/b.txt
@@ -0,0 +1 @@
+b
\ No newline at end of file
diff --git a/c.txt b/c.txt
new file mode 100644
index 0000000..d36cf97
--- /dev/null
+++ b/c.txt
@@ -0,0 +1 @@
+ccccc
\ No newline at end of file

fixup合并提交,只保留较早的提交信息

使用fixup会把相邻的commit合并到上一次的commit中,会保留上次的commit信息,fixup不可以编辑commit信息
查看距离HEAD最近的两次提交

git rebase -i HEAD~2
>
pick c37146f d
pick 88a2a47 新的commit c# Rebase f18b622..88a2a47 onto f18b622 (2 commands)

88a2a47前面pick改为f88a2a47修改的内容就会合到c37146f上面.

pick c37146f d
f 88a2a47 新的commit c# Rebase f18b622..88a2a47 onto f18b622 (2 commands)
git log
>
commit c6dcdbc2c174b6480aa6d76ca3cfa3ec5b6a7ea5 (HEAD -> master)
Author: you <youeamil@outlook.com>
Date:   Thu Sep 8 13:13:43 2022 +0800dcommit f18b62266b664cd3228bd332f81a32dcd6a1ad1f
Author: you <youeamil@outlook.com>
Date:   Thu Sep 8 13:13:30 2022 +0800a

http://www.ppmy.cn/news/425777.html

相关文章

Docker学习文档(个人向)

Docker日常使用文档 1.为什么是docker 在开发的时候&#xff0c;在本机测试环境可以跑&#xff0c;生产环境跑不起来 这里我们拿java Web应用程序举例&#xff0c;我们一个java Web应用程序涉及很多东西&#xff0c;比如jdk、tomcat、mysql等软件环境。当这些其中某一项版本不…

HTB打靶(Active Directory 101 Sizzle)

namp扫描 nmap -A -T4 10.129.4.79 Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-30 02:44 EST Stats: 0:02:39 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan NSE Timing: About 99.83% done; ETC: 02:47 (0:00:00 remaining) Nmap scan report for …

百万军中取上将首级如探囊取物, 千万行里改关键源码在弹指瞬间。 功能超强的程序编辑器!

TSEPro11_Setup.exe 百万军中取上将首级如探囊取物&#xff0c; 千万行里改关键源码在弹指瞬间。 功能超强的程序编辑器&#xff01; 为防内容被恶意篡改&#xff0c;参考 MD5 (TSEPro11_Setup.exe) d98ce8ddaee6d3e101db35e7324e35ae 赵4老师 / Tsepro11 GitCode 推荐使用…

docker高级网络配置、高级数据卷机制和Dockerfile说明

11.高级网络配置 11.1 说明 当 Docker 启动时&#xff0c;会自动在主机上创建一个 docker0 虚拟网桥&#xff0c;实际上是 Linux 的一个 bridge&#xff0c;可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。 同时&#xff0c;Docker 随机分配一个本地未占用的…

开发需要了解的服务器配置

文章目录 前言一、查看CPU1、查看CPU是几核的&#xff08;总核&#xff09;2、查看CPU是几核的和型号3、查看物理CPU数4、查看CPU架构信息 二、查看内存大小1、cat /proc/meminfo | grep MemTotal2、free 三、硬盘 前言 在实际工作中&#xff0c;我们的服务器环境基本都是使用l…

个人信息示例

声明 本文是学习GB-T 35273-2020 信息安全技术 个人信息安全规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 个人信息示例 个人信息是指以电子或者其他方式记录的能够单独或者与其他信息结合识别特定自然人身份或者反映特定自然人活动情况的各种…

使用gpg工具实现公钥加密

实验环境&#xff1a; 两台centos主机。 一台充当hostA,另一台充当hostB。 在hostB主机上用公钥加密&#xff0c;在hostA主机上解密 1、在hostA主机上生成公钥/私钥对 gpg --gen-key [rootcentos7 ~]# gpg --gen-key gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Fo…

Linux系统安装Mysql数据库+Navicat连接数据库

目录 一.MySQL数据库下载&#xff1a; 1.官方网站&#xff1a; 2.镜像&#xff1a; 二.安装&#xff1a; 1.上传&#xff1a; 2.解压&#xff1a; 3.重命名&#xff1a; 4.删除[可选]&#xff1a; 5.创建目录&#xff1a; 6.添加用户与组&#xff1a; &#xff08;1&…