2020-12-28

博客园Logo
首页
新闻
博问
专区
闪存
班级

代码改变世界
搜索
注册
登录
返回主页
TechFlow2019
博客园 首页 新随笔 联系 订阅 管理随笔 - 306 文章 - 0 评论 - 188
Git提交错了不用慌,这三招帮你修改记录
大家好,今天我们来聊聊git当中一个很重要的功能——历史记录的修改。

有的时候我们会突然发现某个地方需要修改,最常见的某个不应该被提交的文件被提交了进来。我们希望它不只是在后序的版本当中不再出现,而是希望整个从git仓库当中移除掉。这个时候我们就需要修改git之前的历史记录。这个时候应该怎么办呢?

不要着急,git当中有很多的手段可以修改之前的历史提交记录。

修改最后一次提交
这一点我们在之前的文章当中曾经提到过,如果我们只是想要修改最后一次的提交记录,这是比较简单的。我们只需要直接修改我们想要修改的部分,在提交的时候加上一个参数–amend即可。

git commit --amend
amend的意思是补丁,它可以把我们这一次的修改合并到上一条历史记录当中,而不会产生一个新的commit记录。运行之后,它会打开一个vim编辑器,我们还可以修改上一次commit时输入的提示信息。

我们使用git log检查的话,会发现历史记录的修改时间还是上一次的时间。看起来就好像什么也没有发生过一样,悄无声息地就改掉了。

修改多个信息
–amend虽然好用,但是它只能修改最后一次的提交信息,如果我们想要修改的提交记录在那之前,我们应该怎么办呢?

git当中并没有提供直接的工具来实现这一点,不过我们可以使用rebase来达成。我们可以加上-i进行交互式地变基,我们可以在任何想要的修改完成之后停止,也可以添加文件或者是做其他想要做的事情。但是我们变基的目标不是某一个分支而是当前分支的某一个历史节点,所以我们需要提供一个具体的commitid或者是指针位置。

git rebase -i的功能非常强大,我们几乎可以使用它来完成所有一切我们想要完成的事情。

比如我们想要修改倒数第二次提交,我们可以执行git rebase -i HEAD~3。也就是以倒数第三个节点作为基准节点执行变基,这时候git会进入一个vim窗口,在这个窗口当中我们可以看到最近的三次提交记录。

首先我们可以看到上面的三行就是我们可以修改的三个commit,分别展示的是要执行的操作以及commitid以及commit message。这里的操作默认的是pick,也就是使用该commit。关于我们可以执行的操作git在下方也给了充分的提示,其中比较常用的有pick、edit以及squash。

这一次我们想要做的是修改提交记录,所以我们应该执行edit,我们把想要修改的commit前的pick改成edit。比如这样:

退出之后,git会自动带我们回到我们选择edit的分支提交之后的版本。我们进行我们想要的修改,这里我在第15篇文章当中加上了一行:尝试rebase。之后再使用git add以及git commit --amend进行修改提交结果。

再之后我们执行git rebase --continue,把剩下要应用的变更应用完成。

一切都结束之后,我们可以使用一下git show命令查看一下我们修改的bee9ce3这个commit的记录。可以看到已经多了这一行,说明我们的修改成功了。

顺序变更、合并、拆分
顺序变更
我们不仅可以修改某一次commit当中的内容,还可以修改这些commit的相对顺序,以及可以让它们合并以及拆分。

修改顺序其实很简单,我们只需要人为地修改rebase -i之后弹出的vim文件即可。比如说原本的记录是:

pick A change A
pick B change B
pick C change C
如果我们想要更换顺序,我们只需要修改这个文件即可。比如变成:

pick B change B
pick A change A
pick C change C
那么当我们在退出vim的时候,git会首先应用B commit的变更,再应用A最后应用C。

合并
除此之外,我们还可以合并多个commit记录成一个。操作的方法也很简单,就是我们只需要把pick修改成squash。git会自动把所有squash的commit记录合并在一起。

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

pick A change A
edit B change B
pick C change C
当我们退出的时候,我们会进入到B commit刚刚提交完的状态。由于我们要做的是拆分B这个提交,所以我们需要执行git reset HEAD^,把上一次提交重置。然后再分别add我们想要拆分开来提交的文件。

整个操作如下:

git reset HEAD^
git add test/*
git ci -m ‘add test’
git add code/*
git ci -m ‘update code’
git rebase --continue
这样我们就把commit B拆分成了两个commit插入到了历史记录当中了。

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

今天的文章就到这里,衷心祝愿大家每天都有所收获。如果还喜欢今天的内容的话,请来一个三连支持吧~(点赞、关注、转发)

标签: git入门, git教程, git
好文要顶 关注我 收藏该文
TechFlow2019
关注 - 0
粉丝 - 197
+加关注
1 1
« 上一篇: codeforces 1443D,解法简单,思维缜密的动态规划问题
posted @ 2020-12-28 09:47 TechFlow2019 阅读(226) 评论(0) 编辑 收藏
刷新评论刷新页面返回顶部
登录后才能发表评论,立即 登录 或 注册, 访问 网站首页
写给园友们的一封求助信
【推荐】News: 大型组态、工控、仿真、CADGIS 50万行VC++源码免费下载
【推荐】有你助力,更好为你——博客园用户消费观调查,附带小惊喜!
【推荐】博客园x丝芙兰-圣诞特别活动:圣诞选礼,美力送递
【推荐】了不起的开发者,挡不住的华为,园子里的品牌专区
【福利】AWS携手博客园为开发者送免费套餐+50元京东E卡
【推荐】未知数的距离,毫秒间的传递,声网与你实时互动
【推荐】新一代 NoSQL 数据库,Aerospike专区新鲜入驻

相关博文:
· app自动化 - 元素定位不到?别慌,3大工具帮你搞定!
· eclipse使用git提交项目
· git rebase 合并多次提交
· git 初始化提交项目
· 统计git提交代码量
» 更多推荐…

最新 IT 新闻:
· 相互宝2020年账单出炉:大病互助全年分摊91元 最高发五种重疾公布
· 微信直播,直奔带货?
· 阿里、上汽等投资成立汽车科技公司 注册资本100亿元
· 阿里达摩院2021十大科技趋势:第三代半导体材料将大规模应用
· 银行的羊毛不能薅
» 更多新闻…
历史上的今天:
2019-12-28 大数据基石——Hadoop与MapReduce
公告

日拱一卒,功不唐捐
欢迎关注我的公众号:TechFlow

昵称: TechFlow2019
园龄: 1年
粉丝: 197
关注: 0
+加关注
< 2020年12月 >
日 一 二 三 四 五 六
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9
搜索

找找看

谷歌搜索
常用链接

我的随笔
我的评论
我的参与
最新评论
我的标签
我的标签

算法(96)
LeetCode(58)
机器学习基础(53)
python(45)
数据结构(39)
Python基础(20)
git(15)
go语言(14)
高等数学(14)
golang(13)
更多
随笔分类

Go(15)
LeetCode题解(53)
Python(37)
spark(6)
大数据与分布式(10)
机器学习(45)
其他(2)
数学基础(16)
算法与数据结构(48)
随笔档案

2020年12月(14)
2020年11月(18)
2020年10月(22)
2020年9月(21)
2020年8月(22)
2020年7月(22)
2020年6月(29)
2020年5月(31)
2020年4月(36)
2020年3月(32)
2020年2月(28)
2020年1月(23)
2019年12月(8)
最新评论

  1. Re:大数据算法——布隆过滤器
    @忆回首泪倾城 DFGG…
    –Jack勤劳的打工人

  2. Re:裸考了一次雅思,我居然学会了数据分析!
    @Grey Zeng 6.0…
    –TechFlow2019

  3. Re:裸考了一次雅思,我居然学会了数据分析!
    楼主最后考了多少分?
    –Grey Zeng

  4. Re:职场中究竟什么是ownership,你是一个有ownership的人吗?
    新人可以冲一冲,因为不需要评估风险,搞不下去有资本换
    –GearTools

  5. Re:有了Git这个功能,再也不需要依赖IDE了!
    真实用
    –JRoger
    阅读排行榜

  6. 大数据算法——布隆过滤器(11104)

  7. 在vscode中配置LeetCode插件,从此愉快地刷题(7050)

  8. 概率统计——三扇门游戏与贝叶斯定理(3866)

  9. 一半人写不出冒泡排序,你的同龄人都躺下了(3711)

  10. MySQL不香吗,为什么还要有noSQL?(3482)
    评论排行榜

  11. 一半人写不出冒泡排序,你的同龄人都躺下了(31)

  12. 大数据算法——布隆过滤器(29)

  13. MySQL不香吗,为什么还要有noSQL?(14)

  14. 随机数大家都会用,但是你知道生成随机数的算法吗?(9)

  15. 职场中究竟什么是ownership,你是一个有ownership的人吗?(6)
    推荐排行榜

  16. 大数据算法——布隆过滤器(45)

  17. MySQL不香吗,为什么还要有noSQL?(20)

  18. 一半人写不出冒泡排序,你的同龄人都躺下了(17)

  19. 从头搭建一个“微博”有多难(14)

  20. 对于技术岗位而言,开发岗累还是算法岗累呢?(9)
    Copyright © 2020 TechFlow2019
    Powered by .NET 5.0 on Kubernetes

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值