Git 使用 rebase 修改历史提交记录

这篇具有很好参考价值的文章主要介绍了Git 使用 rebase 修改历史提交记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、只修改最后一次提交记录

运行以下这条命令之后,它会打开一个vim编辑器,我们就可以修改上一次commit时输入的提交信息。

git commit --amend

接下来你要是想修改描述信息的话,直接键入:i,此时进入了输入模式。

可用键盘上下键转到描述所在的那一行,然后进行修改。

修改完成后,按下 Esc 键退出编辑模式,在键入 :wq 回车退出并保存修改,完成提交。

amend:是补丁的意思,amend不是修改最近一次commit,而是整个替换掉他。amend后生成的commit是一个全新的commit,之前的老的commit会从项目历史中被删除。如果你amend了一个被其他开发者使用的commit,会严重影响其他开发者,所以要注意不要对一个公共的commit使用amend。

二、修改多个提交记录

执行以下命令,git会进入一个vim窗口,在这个窗口当中我们可以看到HEAD之前的2次提交

git rebase -i HEAD~2 // rebase HEAD之前的2次提交

// 或者

git rebase -i {commitID} // 例如 git rebase -i d95ddfb

HEAD~2:告诉 git 我要改变HEAD之前的2次提交

变基时可用的命令:

pick只是意味着包括提交。重新进行命令时,重新安排pick命令的顺序会更改提交的顺序。如果选择不包括提交,则应删除整行。

reword该命令与pick相似,但是使用后,重新设置过程将暂停并为您提供更改提交消息的机会。提交所做的任何更改均不受影响。

edit如果您选择edit提交,则将有机会修改提交,这意味着您可以完全添加或更改提交。您还可以进行更多提交,然后再继续进行变基。这使您可以将大型提交拆分为较小的提交,或者删除在提交中所做的错误更改。

squash该命令使您可以将两个或多个提交合并为一个提交。提交被压缩到其上方的提交中。Git使您有机会编写描述这两个更改的新提交消息。

fixup这类似于squash,但是要合并的提交已丢弃其消息。提交仅合并到其上方的提交中,并且较早提交的消息用于描述这两个更改。

exec这使您可以对提交运行任意的Shell命令。
 

1、修改提交记录 

在vim窗口里,按i进入编辑模式,把想要修改的commit前的pick改成edit。

注意:这一步只是告诉 git 你将要修改哪些提交记录,还不是真正的修改提交信息。

pick 6934312 add 1
pick 5ce6dde add 2

修改为

edit 6934312 add 1
pick 5ce6dde add 2

接着按Esc,输入:wq 保存退出。

退出之后,git 会自动带我们回到我们选择edit的分支提交之后的版本,有冲突要先解决冲突,之后我们再使用 git add . 以及 git commit --amend 进行修改提交结果。

注意:这一步才是真正的修改提交信息内容。

git commit --amend // 以当前代码重新覆盖本次提交

或者:如果不用修改提交信息

git commit --amend --no-edit  // 注意--no-edit的意思是不用再修改这个commit的commit信息

 git commit --amend 之后,会出现vim窗口,按i进入编辑模式,修改提交信息,接着按Esc,输入:wq 保存退出。

git rebase --continue  // 继续rebase,如果有冲突则解决冲突

全部修改完成之后我们执行 git rebase --continue,结束这次 rebase。

注意:如果有多个edit,则多重复几次上面的步骤(git commit --amend 和 git rebase --continue),把剩下要应用的变更应用完成。

直到出现以下提示,才说明全部修改已经完成。

​Successfully rebased and updated refs/heads/master.

2、提交记录顺序变更

修改顺序其实很简单,我们只需要修改 git rebase -i 之后弹出的vim窗口里的提交记录信息即可。

pick 8b485bb add 1
pick a75ed74 add 2

修改为(把2行的位置换一下)

pick a75ed74 add 2
pick 8b485bb add 1

小技巧:这个是vi编辑器,首先Esc ,进入命令模式,移动到第一行 按dd,本行就被剪切,pick a75ed74 add 5就变成了第一行,接着按 p刚刚剪切的就成了第二行,快速交换顺序

接着 Esc:wq 保存退出。

3、合并提交记录

我们只需要把pick修改成squash,git就会自动把所有 squash 的 commit 记录合并在一起。

pick 6934312 add 1
pick 5ce6dde add 2

修改为

squash 6934312 add 1
squash 5ce6dde add 2

接着 Esc:wq 保存退出。

开始执行变更

然后 在弹出来的编辑框里 写提交信息,我们可以修改提交消息,默认是把两个消息都合并

接着 Esc:wq 保存退出。

git log查看,合并成功。

4、拆分提交记录

有的时候一个commit非常巨大,我们可能也会想要将它拆分,其实操作也很简单。比如我们想要把commit 2 拆分成两条,首先,我们在rebase的时候将commit 2 前面的pick修改成edit。

pick 6934312 add 1
pick 5ce6dde add 2

修改为

pick 6934312 add 1
edit 5ce6dde add 2

接着 Esc:wq 保存退出。

当我们退出的时候,我们会进入到 commit 2 刚刚提交完的状态。由于我们要做的是拆分 commit 2 这个提交,所以我们需要执行 git reset HEAD^,把上一次提交重置。然后再分别add我们想要拆分开来提交的文件,这样就把commit 2拆分成了两个commit插入到了历史记录当中了。

git reset HEAD^
git add test/*
git ci -m 'add test'
git add code/*
git ci -m 'update code'
git rebase --continue

命令写错了怎么办

You can fix this with 'git rebase --edit-todo'.
# 用 git rebase --edit--todo  来重新编辑命令

注意:如果我们的commit已经被提交到了远程,是不可以直接 git push 同步的,因为git会校验提交代码的hash值,发现对不上之后会禁止提交。所以如果想要提交到远程的话,只能使用 git push -f 强制覆盖。但是这是一个非常非常危险的操作,如果你 git push -f 了,会覆盖之前的提交记录,导致没人知道你修改了什么,所以只建议在自己独有的分支上如此操作,一定一定要谨慎使用。

 文章来源地址https://www.toymoban.com/news/detail-782283.html

三、修改特定commit的内容

1、要修改 id 为 commitid 的 commit。

2、运行 git rebase --interactive commitid^(指定commit的父commit)。

git rebase --interactive commitID^

// 或者

git rebase -i {commitID^} // 例如 git rebase -i d95ddfb

注意:我们要 rebase 到要修改的 commit 的前一个commit,即指定 commit 的父 commit。

3、在跳出的编辑器中,将 commitid 所在行的 pick 改成 edit,保存后退出。

4、进行想要的修改,并且 git add,然后用 git commit --amend --no-edit 进行 commit

注意:--no-edit的意思是不用再修改这个 commit 的 commit 信息。

5、git rebase --continue。这个命令会回到最初的HEAD commit。这里如果有冲突, 需要先解决冲突。

四、恢复代码 和 取消 rebase 操作

1、恢复代码

有时候可能会由于某些误操作,某些 git 命令会从您的视图中删除提交,例如:git reset 可能会从您当前的分支中删除提交,因此这些提交会从您的视图中消失,修改提交也会从您的视图中删除提交。

这时候可以使用 git reflog 命令,该命令允许您通过显示 HEAD 指针移动来查找此类提交。它将向您显示 git 最近创建的所有提交。这包括临时创建的提交,或者已经被删除的,在分支上不再可见的提交

// 查看 HEAD 引用的完整更改历史记录
git reflog


# <output>
cf616d4 HEAD@{1}: reset: moving to 45ca2045be3aeda054c5418ec3c4ce63b5f269f7
# ... snip ...
1f1a73a HEAD@{2}: commit: More chaanges - typo in the commit message
45ca204 HEAD@{3}: commit: These are new changes
cf616d4 HEAD@{4}: commit (initial): Initial commit
# </output>


// 使用 reset 指定 commitID 来选择要恢复的记录
git reset --hard 1f1a73a

2、取消 rebase

如果 rebase 过程中不想 rebase 了,可以使用

git rebase --abort 	// 终止rebase

--abort 和 --skip 的区别:

git rebase --abort  取消本次操作。是无风险的操作,会回到rebase操作之前的状态,2个分支的commits毫发无损。


git rebase --skip  跳过这个错误,继续本次操作。是高风险的操作,引起冲突的commits会被丢弃(这部分代码修改会丢失)。

 

到了这里,关于Git 使用 rebase 修改历史提交记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Git】—— 版本控制(忽略文件、查看修改内容,撤销未提交的修改、查看历史提交记录)

    目录 一、准备工作 二、忽略文件 三、查看修改内容 四、撤销未提交的修改 五、查看提交记录         前面学习了Git最基本的用法,包括安装Git、创建代码仓库以及提交本地代码。         下面将要学习版本控制。         先选择一个项目,给它创建一个代码仓库

    2024年02月05日
    浏览(25)
  • 【git 使用】使用 git rebase -i 修改任意的提交信息/合并多个提交

    修改最近一次的提交信息的方法有很多,可以参考这篇文章,但是对于之前的提交信息进行修改只能使用 rebase。 假设我们想修改下面这个提交信息,想把【登录】改成【退出登录】步骤如下 运行 git rebase -i head~3 打开了一个文本编辑器 -i  【interactive】参数表示进行交互式

    2024年02月21日
    浏览(21)
  • 【git使用】之修改历史commit信息

    直接使用amend进行修改 1.1修改commit注释信息 1.2 修改作者、邮箱 例如:git commit --amend --author=“silinchen silinccc@gmail.com 修改完成后可用git log查看是或否修改成功 2.1 使用git log查看提交记录 查看需要修改的内容是哪些 2.2 rebase需要修改的commit 执行 rebase 命令后,会出现 reabse 的编

    2024年02月02日
    浏览(62)
  • Git - 查看 commit 提交历史

    查看提交历史 在提交了若干更新,又或者克隆了某个项目之后,如何查看提交历史 官方栗子 运行下面的命令获取该项目: 运行 git log 命令 可以获取到的信息 不传入任何参数的默认情况下, git log 会按 时间先后顺序 列出所有的提交,最近的更新排在最上面 会列出每个提交

    2024年02月06日
    浏览(25)
  • git rebase合并多个commit记录

    在做一个需求的时候,会出现多次提交记录,如下: 其中,发现中间有三次提交的记录一致,是可以合并成一次commit的 下面开始合并: 1.找到要合并的commit 命令 其中 -i 的意思是–interact,即弹出交互式的界面让用户编辑完成合并操作 [startpoint] [endpoint]是前开后闭的区间 [

    2024年02月07日
    浏览(25)
  • 【随笔】Git 高级篇 -- 提交的技巧(上) rebase & commit --amend(十八)

    💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘 您的点赞、关注、收藏、评论,是对我最大

    2024年04月22日
    浏览(24)
  • 怎么使用Git查看项目中代码的提交历史记录?

    怎么使用Git查看项目中代码的提交历史记录? 可以在git上使用下面这段指令 在git上执行完之后,就可以在桌面上看到打印出来的日志文件了 Readme.log日志文件如下: 对指令中的代码进行解释: git log 是git导出指令 format 是需要导出的数据格式,这里是代码提交时间、提交人员

    2024年02月12日
    浏览(28)
  • git修改历史commit信息

    修改历史提交 commit 的信息 操作步骤: git rebase -i 列出 commit 列表 找到需要修改的 commit 记录,把 pick 修改为 edit 或 e,:wq 保存退出 修改 commit 的具体信息git commit --amend,保存并继续下一条git 4. 4. rebase --continue,直到全部完成 中间也可跳过或退出git rebase (–skip | --abort) https

    2024年02月12日
    浏览(26)
  • git 修改历史 commit message

    直接使用下面的命令,如果打开的是 vim 编辑器,先切换到英文输入法, 键入 i 开始编辑(编辑完后也记得转为英文输入法), 再键入 Esc 结束编辑并键入 :wq 保存退出即可。 步骤: 通过 rebase 变基实现 查看最近的3次提交: 当通过查看 log 定位出要修改的 commit 的位置后,就

    2024年04月25日
    浏览(23)
  • 【软件测试】Git查看commit的提交历史(详细)一点即通...

    查看提交历史 在提交了若干更新,又或者克隆了某个项目之后,如何查看提交历史 官方例子: 运行下面的命令获取该项目: 运行 git log 命令 可以获取到的信息 不传入任何参数的默认情况下,git log 会按时间先后顺序列出所有的提交,最近的更新排在最上面; 会列出每个提

    2024年02月12日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包