站长家园(原代码之家)(www.adminjie.com)网站源码,微信源码,游戏源码,商业源码分享平台。
当前位置:网站首页 技术文章 网络编程 正文

git怎样修改历史记录

时间:2022-01-14 [网络编程]作者:fabuyuan 浏览:4 次

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

git怎样修改历史记录  2

本文操作环境: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 <指定提交号>,比如可以用git rebase -i HEAD~3来修改本次提交、上次提交、上上次提交共三次提交。

git怎样修改历史记录  2

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

git怎样修改历史记录  2

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

推荐学习:《Git教程》

以上就是git怎样修改历史记录的详细内容,更多请关注站长家园其它相关文章!

本文标签:  git

转载请注明来源:git怎样修改历史记录

本文永久链接地址:https://www.adminjie.com/post/7654.html

免责声明:
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

附:
二○○二年一月一日《计算机软件保护条例》第十七条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!

版权声明:
一、本站致力于为软件爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的部分源码下载文件为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、我站提供用户下载的所有内容均转自互联网。如有内容侵犯您的版权或其他利益的,若有侵犯你的权益请:提交版权证明文件到邮箱 2225329873#qq.com(#换为@) 站长会进行审查之后,情况属实的会在三个工作日内为您删除。

  • 站长家园(原代码之家)会员升级
  • 最新文章
    • 手把手教你CSS架构之SMACSS

      手把手教你CSS架构之SMACSS

      本篇文章给大家带来了关于css架构SMACSS的相关知识,其中会讲到什么是smacss以及该架构分类的相关问题,希望对大家有帮助。因为CSS只有一个作用域,...

    • 一起聊聊MySQL基础之触发器和事件

      一起聊聊MySQL基础之触发器和事件

      本篇文章给大家带来了关于mysql中触发器和事件的相关知识,其中包括触发器使用注意事项、查看和删除事件、事件使用注意事项等等,希望对大家有帮助。触发器我们使用M...

    • 使用jq如何删除css样式

      使用jq如何删除css样式

      删除方法:1、用removeClass()或toggleClass()移除指定CSS类,语法“removeClass("类名")”或“toggleClass("...

    • css3如何让盒子水平居中

      css3如何让盒子水平居中

      css3让盒子水平居中的方法:1、使用margin属性,给盒子元素添加“margin:0auto;”样式即可水平居中;2、利用flex弹性布局来实现水平居中...

    • 如何将css文件设置为utf-8

      如何将css文件设置为utf-8

      在css中,可以利用“@charset”规则来将字符编码设置为“utf-8”,该规则可以指定样式文件中使用的字符编码,语法为“@charset"UTF-8";...

    热门文章