git commit —amend_Git之修改commit记录
在很多影视作品里,就算主人公乘上了时光鸡,还是无法修改历史(或者说修改后造成十分严重的后果);而现在,在 Git 的强力驱动下,修改历史变得简单又相对安全。
本文叨叨修改 commit 历史的问题
应用场景
① 刚刚的提交不小心打错了 能更改吗?
比如Sun of a Beach with canvas
写成了 son of a b**ch with canvas
② 刚刚的提交漏掉了文件 能追加吗?
③ 以前写的 commit 很菜 能更改吗?
可能你的 commit是这样的 :
fix bug
fix another bug
fix final bug
oh anotherOne wtf?
魔法一:git coomit --amend -m ''
对于场景 ①,可以这样急救
git coomit --amend -m 'Sun of a Beach with canvas'
实际效果图:
如果没有加 -m
参数的话,会弹出 vim 让你编辑最近一次的commit
注意:
--amend
只能修改最近的一次 commit- 最近的那一次 commit物件的 SHA1 被新的 SHA1 值替代,因为对于
commit 物件
来说它的内容发生了改变 - commit 的时间并未被修改,因为时间作者信息是由
tree物件
储存,文件、文件目录结构啥都没变,tree物件不可能变化
同时,对于场景二 ,--amend
也能处理
#先把漏掉的文件加入缓存区
git add careless.less
#再使用--amend参数进行commit,下面--no-edit 表示保留原有message信息
git commit --amend --no-edit
注意:
- commit 的时间并会发生变化
魔法二:git reset
对于场景 ②,另一种处理方式是git reset
指令
git reset
指令是跳回之前的某次 commit (而非字面重置的意思)
附加知识:定位到那一次commit的多种方式
- 通过HEAD或当前分支(比如 master) => 像贴纸一样指向当前的 commit,
再加上 ^
表示当前commit的前一次 ,或者~n
表示当前commit的前n次
- 通过 SHA1 值的简写 => 比如
e2d2873
所以可以退回到之前的 commit => 重新添加文件 => 再次 commit
退回上一次的commit的三种写法:
git reset e2d273 #opt1:利用上一次的SHA1简写值
git reset HEAD^ #opt2: 利用HEAD
git reset master^ #opt3: 利用当前所在分支
实际效果图:
魔法三:git rebase
对于情景 ③,当你写了‘折磨多’无用commit,别急着删掉 .git 目录 ;先试试 git rebase
(只涉及到 rebase 附加的一个小小的应用,在接下来的应用中可以想象成HEAD一直顺着commit往下走,遇到非pick
的commit就会停下来,等待你操作这个commit)
1.git log 看看现有的commit
git log --oneline
2.确定操作的范围
git rebase -i 4d11e38
#此处-i表示interactive 交互式的rebase过程
3.把需要修改的commit前面 pick
改为 r
保存并退出 vim 编辑器
4.正式修改 commit
go to jail
改成 go to party
是不是潇洒的多呢
退出保存后,再次查看commit
我们再重新看看这张图,
细心的你有没有发现 除了可以 r
(也就是reword commit) 还有很多强大的操作,这里举两个栗子:
e
:edit commit ,可以实现对commit的高级修改:比如干掉这个commit,重新提交s
:squash commit,可以实现合并多个commit:会向更早的邻居commit物件去合并,同时会给你修改message的机会d
:drop commit ,把它丢掉=> 把这个commit删除- 另外一个骚操作:只要在rebase弹出的编辑器里面手动修改commit行的位置,就可以实现
修改commit的顺序
的效果。同理啦,删掉某一行也就实现了删掉了这个commit
的效果
你可能会想:reset回去改 commit 信息
既然
git reset
可以跳回之前的 commit ,两次相反的 reset 不就回到了当前提交吗?
对于情景 ③,利用这一点,我们可以依次跳到各个 commit ,搬砖 ... 最后利用git reflog
查找commit 信息跳回来
但是,新的 commit 物件并没有被之后的 commit 所指到 ,当你再次reset回去的时候,一切还是原来的样子。不信你看
除非你愿意去手动修改 commit 的指向,可能会生效吧
但是
如果是真实开发的话,已经 push 出去的 commit 不要修改了(会引发许多麻烦),就让往事都随风吧
如有错误,恳请指正
git commit —amend_Git之修改commit记录相关推荐
- git修改commit的用户名与邮箱
对于 git 的用户名与邮箱,我们大多数人都有两套,一套公司账户平时工作用和一套个人账户用于业余项目.而我又常常在 commit 以后才发现用户名与邮箱设置错了.本文总结了如何修改 Commit 的用 ...
- Git pull时报错:commit your changes or stash them before you can merge. 的解决办法
Git pull时报错:commit your changes or stash them before you can merge. 的解决办法 今天在pull的时候,报错,信息如下: error: ...
- Git 修改commit 相关操作
修改最新提交的commit的message git commit --amend 执行 git commit --amend 然后修改注释即可 (需要通过vi 或vim编辑并保存) 修改旧的commi ...
- git修改commit信息
git修改commit信息 主要有以下3种场景 1.刚刚commit,还没有push,使用git commit --amend. 2.刚刚push,要修改最后一次push的commit信息,使用git ...
- GIT 修改commit message
背景:很多时候,我们项目对提交的message有格式要求,如果我们git commit提交之后,格式不正确,那就无法push,这时候需要修改提交的message 1.修改本次提交message git ...
- git基本使用(配置文件、日志/参考日志、版本回退、撤销更改、修改commit提交)
文章目录 0 背景 1 历史 2 git配置文件的使用 2.1 设置用户名和邮件地址 2.2 查看配置 2.3 修改配置来达到忽略文件(即不上传文件)以及强制上传被忽略的文件 2.4 配置别名 3 使 ...
- shell获取git最近一次提交信息_Git修改commit提交信息
当进行一次commit提交的时候,可以附带简短的信息说明,代码如下:[Shell] 纯文本查看 复制代码$ commit -m "蚂蚁部落提交" 在-m命令后面跟着的"蚂 ...
- Git 修改 commit author
git rebase -i HEAD~9 ~9 表示修改多少筆提交,從當前開始往前數. 執行完後 把pick改成edit,保存退出. 然後執行 git commit --amend --reset-a ...
- 【Git】Git修改 commit 的信息
Git 修改 commit 的信息 ①:git log 查看提交日志,找到要修改的commit ②:git rebase -i HEAD~n 1.切换到需要修改的 commit 中,n为commit的 ...
最新文章
- 解决:No configuration found. Configuring ehcache from ehcache-failsafe.xml 问题
- 前端获取浏览器标识_浏览器缓存机制
- PB中获得dropdownlistbox下拉选框中选择项的序列号
- springboot整合H2内存数据库,实现单元测试与数据库无关性
- Atitit 提升开发效率使用内嵌Tomcat 内嵌webserver 于单元测试
- HTML+CSS实现个人简历
- Web 方向学习路线
- linux配置网桥,Linux下通过brctl配置网桥
- 流程图常用符号及其代表含义
- 多个模型融合训练神经网络-devise模型的实现
- P3403 跳楼机 同余最短路
- 【文件处理】python 在线预览文件_OFFICE 文档转换为html在线预览
- table组件抽离封装
- [NGUI]NGUI中的九宫格切图模式
- Sass、Scss、Less和Stylus区别总结
- Android Studio 生成APK签名证书
- 刚刚装好的ppt插件islide消失了,如何解决呢?
- ospf状态机-通俗易懂的小故事
- 万得数据写入Excel
- 黑马在线教育数仓实战7
热门文章
- 传感器实训心得体会_传感器实训心得
- python包pip安装_python包管理之Pip安装及使用
- mysql栏目表设计_MySQL表设计
- xfs_repair 实际工作中的问题
- mysql 自动化运维工具_部署MySQL自动化运维工具inception+archer
- php 制表符分隔csv,CSV(逗号分隔)、文本文件(制表符分隔) 等文件的读取
- 大连理工版小学计算机教案,小学信息技术教案六年上LOGO 大连理工大学版.docx...
- 皮一皮:只恨不为女儿身...
- 皮一皮:南北差异之相亲相爱的一家人系列...
- Docker 入门终极指南:边学边用