搜索
首页开发工具gitgit怎样修改历史记录

方法:1、用“git commit --amend”命令修改一次历史记录;2、用“git rebase -i 指定提交号”命令修改多条历史记录;3、用“git filter-branch --filer 命令 修改的范围”命令重写历史记录。

git怎样修改历史记录

本文操作环境:Windows10系统、Git2.30.0版、Dell G3电脑。

git怎样修改历史记录

初级选手 git amend

如果仅仅是在提交之后发现自己手残了,用git commit --amend就可以修改刚才的那一次提交。该命令在执行以后,会将刚刚的那一次提交从当前分支移除,把工作空间恢复到上次准备提交的状态(同时混合了上次提交之后的更改),然后显示出一个 vim 的界面让你去修改上次的提交信息。在vim 中保存后,就会把当前的所有修改一并用新的提交信息提交了。

该命令仅仅可以修改最后一次提交,一个命令相当于执行了如下一系列动作:

    $ORIG_HEAD=`git show`#保存当前的这次提交的 commit 号
    $git reset --soft HEAD^#回到最后一次提交准备提交前的状态
    $...#做一些操作和修改
    $git commit -c $ORIG_HEAD#表示用最后一次提交的提交信息来做为提交信息,不过会调出编辑器界面

中级选手 git rebase

前面的git commit --amend仅仅可以修改最后一次提交,但是当自己一时兴起,手残了一路时,这个命令就无法拯救我们了,这个时候我们就要祭出git rebase -i 这个大杀器来帮我们修改那些不堪回首的往事。

实际上,git rebase -i并不是一个专门用来修改历史记录的命令,而是一个让我们可以交互式(就是一个个来) 进行衍合操作的命令,不过我们可以用这个命令来实现对于提交历史的修改。

该命令的使用方法是git rebase -i e9441c8673a352146e070543252d2b5c,比如可以用git rebase -i HEAD~3来修改本次提交、上次提交、上上次提交共三次提交。

11.png

如图,我如果向修改这三次提交,输入git rebase -i HEAD~3,就会出现如下的界面:

12.png

这是一个 vim 编辑器的界面,这里是让我们编辑这一段脚本,可以使用的命令有下方注释中的六个命令。当退出当前编辑其的页面后,git 就会根据这个脚本一个个的针对提交执行对应的操作(从最早的那次提交开始执行)。

如果仅仅是想修改提交信息,就把所有的 pick 改成 r ,然后:wq保存,接下来 git 就会让你一个个的从最早的提交信息开始修改。

剩余的命令中, e 是会在修改对应提交时跳出 vim 编辑器,此时 HEAD 指针指向这次提交,此时可以用git commit --amend对这次提交进行各种修改,然后执行 git rebase --continue就会继续下一次操作;s 则是会在修改对应提交的时候把这次的提交和其父提交合并为一次提交;f 是和s类似但是会忽略当前提交的信息,直接采用父提交的信息;x 是需要在 x 之后输入命令然后在 HEAD 指向这次提交的时候执行。利用这些命令还可以完成重排提交、拆分提交的动作。

终极杀手 git filter-branch

假如说我们提交了 N 多次以后,突然发现我们这些提交的邮箱都写错了(╯°□°)╯︵ ┻━┻,这个时候如果使用之前提到的命令,估计还没改完就要累死了。这个时候我们就可以使用git filter-branch来重写分支,其可以批量的对每个提交执行我们预设的操作。

git filter-branch命令使用的基本使用格式是git filter-branch --4a0ece41776ebbe5ad7d58686ac8bbd5 '命令' 62ab4d8a6009528d056fcfb19b20b496 ,不同的 filter 会提供给命令不同的输入和输出。比如,--msg-filter表示修改提交信息,原提交信息从标准输入读入,新提交信息输出到标准输出;--tree-filter表示修改文件列表等等。最后会有一个重写的范围。比如,git filter-branch --env-filter 'GIT_AUTHOR_EMAIL=john@example.com export GIT_AUTHOR_EMAIL' HEAD 就可以用来重写邮箱。建议在调用命令之前先啦出一个分支做尝试再在自己要修改的分支上执行操作。

推荐学习:《Git教程

以上是git怎样修改历史记录的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
github是什么github是什么Mar 24, 2023 pm 05:46 PM

​GitHub是一个面向开源及私有软件项目的托管平台,可以让开发者们在这里托管自己的代码,并进行版本控制。GitHub主打的是开源项目与协作,通过这个平台上的开源项目,开发者们可以查看其他开发者的项目源代码,并进行交流和学习。

git中push -u是什么意思git中push -u是什么意思Jul 01, 2022 am 10:36 AM

在git中,“push -u”的意思是将本地的分支版本上传到远程合并,并且记录push到远程分支的默认值;当添加“-u”参数时,表示下次继续push的这个远端分支的时候推送命令就可以简写成“git push”。

git的pack文件有什么用git的pack文件有什么用Jun 30, 2022 pm 05:41 PM

在git中,pack文件可以有效的使用磁盘缓存,并且为常用命令读取最近引用的对象提供访问模式;git会将多个指定的对象打包成一个成为包文件(packfile)的二进制文件,用于节省空间和提高效率。

如何在GitLab上进行第一次登录并更改密码如何在GitLab上进行第一次登录并更改密码Mar 24, 2023 pm 05:46 PM

GitLab是一种基于Web的Git版本控制库管理软件,旨在帮助开发团队更好地协同工作,提高工作效率。当您第一次登录GitLab时,系统会提示您要更改初始密码以确保账户安全。本文将为大家介绍如何在GitLab上进行第一次登录并更改密码。

git中pull失败了怎么办git中pull失败了怎么办Jun 30, 2022 pm 04:47 PM

git中pull失败的解决方法:1、利用“git reset --hard”强制覆盖掉自己的本地修改;2、利用“git stash”推送一个新的储藏,拉取之后利用“git stash pop”将修改保存到暂存区;3、若依然出现问题,则将文件保存到暂存区并提交注释即可。

git分支能改名字吗git分支能改名字吗Jun 16, 2022 pm 05:55 PM

git分支能改名字。改名方法:1、利用git中的branch命令修改本地分支的名称,语法为“git branch -m 旧名字 新名字”;2、利用“git push origin 新名字”命令,在删除远程分支之后将改名后的本地分支推送到远程;3、利用IDEA直接操作修改分支名称即可。

用三行代码使你的git提交记录变干净用三行代码使你的git提交记录变干净Feb 28, 2023 pm 04:19 PM

本篇文章给大家带来了关于git的相关知识,其中主要跟大家聊一聊怎么让你的git记录保持整洁,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

git怎么删除某个分支git怎么删除某个分支Jun 24, 2022 am 11:11 AM

git删除某个分支的方法:1、利用“git branch --delete dev”命令删除本地分支;2、利用“git push origin --delete branch”命令删除远程分支;3、利用“git branch --delete --remotes”命令删除追踪分支。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具