实战:怎么修改老旧commit的message-20211108

image-20211108070122654

目录

实验环境

win10
git version 2.17.0.windows.1

实验软件(无)

1、查看当前测试环境

现在要对最近第二个提交的commit的message信息打算修改,该如何做呢?

查看当前测试环境:

hg@LAPTOP-G8TUFE0T MINGW64 ~/Desktop
$ cd /d/github_repo/git_repository/git_learning/

hg@LAPTOP-G8TUFE0T MINGW64 /d/github_repo/git_repository/git_learning (master)
$ git log -n3 #查看当前分支提交的commit信息
commit accedd4cad0edf250c8c2fa262e3c9d89cd9ab7c (HEAD -> master)
Author: xyy <xyy@189.cn>
Date:   2021-10-07 16:24:04 +0800

    Move  filename readme.md readme

commit f217538eba49b694e5bcdb32810b6b56c73ad693
Author: xyy <xyy@189.cn>
Date:   2021-10-05 08:07:10 +0800

    Add refering project #打算修改这个commit的message信息

commit f99906da3e1494de3a7a48b8d75cbdd78363f425 (tag: js01) #注意,如果要修改上面commit的mesage信息的话,这个commit就是base了;
Author: xyy <xyy@189.cn>
Date:   2021-10-05 07:36:32 +0800

    Add js

hg@LAPTOP-G8TUFE0T MINGW64 /d/github_repo/git_repository/git_learning (master)
$

2、修改方法

hg@LAPTOP-G8TUFE0T MINGW64 /d/github_repo/git_repository/git_learning (master)
$ git rebase -i f99906da3e1494de3a7a48

image-20211108064804962

image-20211108064951950

image-20211108065035463

3、验证

#上述修改完成后,这里就会弹出如下log信息,表示修改历史commit的message信息修改成功
hg@LAPTOP-G8TUFE0T MINGW64 /d/github_repo/git_repository/git_learning (master)
[detached HEAD 1996711] Add a refering project !
 Date: Tue Oct 5 08:07:10 2021 +0800
 2 files changed, 19 insertions(+), 1 deletion(-)
Successfully rebased and updated refs/heads/master. #这里还提示master分支的refes/heads还被更新了
#注意:我们这个变基操作是离不开detached HEAD(分离头指针)的;

hg@LAPTOP-G8TUFE0T MINGW64 /d/github_repo/git_repository/git_learning (master)
$ git branch -av
* master 5e9cb78 Move  filename readme.md readme
  temp   30c1501 Add test

hg@LAPTOP-G8TUFE0T MINGW64 /d/github_repo/git_repository/git_learning (master)
$ git log -n3 --graph
* commit 5e9cb78bc301711a19301f62bbe1ef813f5d0880 (HEAD -> master) #注意:查看当前分支,变基之后,commit id信息会改变,但是其内容不会变(即:tree里面的blob对象不会变);
| Author: xyy <xyy@189.cn>
| Date:   2021-10-07 16:24:04 +0800
|
|     Move  filename readme.md readme
|
* commit 1996711887d1eebfe824ed396d9d8f17cb230623
| Author: xyy <xyy@189.cn>
| Date:   2021-10-05 08:07:10 +0800
|
|     Add a refering project ! #这里可以看到,符合预期效果,某一历史commit的mesage信息已被修改
|
* commit f99906da3e1494de3a7a48b8d75cbdd78363f425 (tag: js01)
| Author: xyy <xyy@189.cn>
| Date:   2021-10-05 07:36:32 +0800
|
|     Add js

hg@LAPTOP-G8TUFE0T MINGW64 /d/github_repo/git_repository/git_learning (master)
$

注意:

上一节修改最近一次commit的message和本次修改历史版本中任意一次commit的message都只针对在本地仓库,如果有推送到远程仓库了的话,这个是不能轻易改的,否则会出问题,会影响其它同事的;

到此,实验结束。

注意事项

问题:为什么 rebase -i git 会分离头指针,git 这么设计的目的是什么呢?(已解决)

image-20211108095852057

作者回复: 
git rebase工作的过程中,就是用了分离头指针。rebase意味着基于新base的commit来变更部分commits。它处理的时候,把HEAD指向base的commit,此时如果该commit没有对应branch,就处于分离头指针的状态,然后重新一个一个生成新的commit,当rebase创建完最后一个commit后,结束分离头状态,Git让变完基的分支名指向HEAD。

问题:那如果要更改的是第一次提交,他的父节点是谁呢?(已解决)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rl8sAiGu-1636341540062)(C:/Users/hg/AppData/Roaming/Typora/typora-user-images/image-20211108100139181.png)]

作者回复: 搜索工具可以根据 “how to rebase the oldest commit” 可以搜到 how do i git rebase the first commit,
https://stackoverflow.com/questions/22992543/how-do-i-git-rebase-the-first-commit

里面告诉我们执行 “git rebase -i --root” 即可

注意:我修改乐first_commit的message,咋second_commit, third_commit, fourth_commit的commit hash都变了呢?(已解决)

image-20211108100807202

作者回复: 很好的发现! 那是因为 message 也是commit的属性,是确定commit的hash值的一个因子。其次,second_commit 有个 parent 的属性,parent的内容发生了变化,因此,second_commit 的hash也变了。

以此类推,后面的commit也发生了变化。

image-20211108102721575

commit的信息:包括作者、描述、内容、父节点信息等,通过变基修改描述会产生连锁反应,涉及到的commit的描述都会变化,所以,在自己的开发分支上可以随意玩,公共分支不可以。

image-20211108111334019

问题:如何识别父级commit?(已解决)

image-20211108101417226

作者回复: 这个版本树如果是自己创建的,我们肯定事先知道哪个commit先建,哪个commit后建,由此知道哪个是parent。这是一种方法。

其他用git命令的方式也很多。

比如: git show —pretty=format:%P HEAD
这个命令可以返回HEAD指针的父commit。

再比如:gitk 打开的界面上直接显示Parent

问题:变基rebase的应用场景?(已解决)

image-20211108102021890

作者回复: 其实,rebase就是在改变之前的变更,比如你发现commit的message写得不规范,或者应该合成一个commit的却拆成了几个,又或者一个commit里面一个文件写错了,等等

可能你新建了5个commit,创建时间早的2个需要修改,后3个commit里面的文件不用变动。用rebase命令是可以达到你要的效果的。只是,那3个在你眼里不用改动的commit,由于其父commit发生变化了,所以它们的commit id 也会发生变化。

image-20211108111143626

对于团队中公用的分支,例如发布分支等,禁用 rebase,因为这样会破坏历史的 commit 信息的,将来要溯源、基于构建历史拉取补丁分支等就会带来极大不便

关于我

我的博客主旨:我希望每一个人拿着我的博客都可以做出实验现象,先把实验做出来,然后再结合理论知识更深层次去理解技术点,这样学习起来才有乐趣和动力。并且,我的博客内容步骤是很完整的,也分享源码和实验用到的软件,希望能和大家一起共同进步!

各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人免费帮您解决问题:

  1. 个人微信二维码:x2675263825 (舍得), qq:2675263825。

    image-20211002091450217

  2. 个人博客地址:www.onlyonexl.cn

    image-20211002092057988

  3. 个人微信公众号:云原生架构师实战

    image-20211002141739664

  4. 个人csdn

    https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

    image-20211002092344616

最后

​ 好了,关于怎么修改老旧commit的message实验就到这里了,感谢大家阅读,最后贴上我女神的photo,祝大家生活快乐,每天都过的有意义哦,我们下期见!

image-20210922123505950

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值