目录
文章目录
实验环境
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
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 这么设计的目的是什么呢?(已解决)
作者回复:
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都变了呢?(已解决)
作者回复: 很好的发现! 那是因为 message 也是commit的属性,是确定commit的hash值的一个因子。其次,second_commit 有个 parent 的属性,parent的内容发生了变化,因此,second_commit 的hash也变了。
以此类推,后面的commit也发生了变化。
commit的信息:包括作者、描述、内容、父节点信息等,通过变基修改描述会产生连锁反应,涉及到的commit的描述都会变化,所以,在自己的开发分支上可以随意玩,公共分支不可以。
问题:如何识别父级commit?(已解决)
作者回复: 这个版本树如果是自己创建的,我们肯定事先知道哪个commit先建,哪个commit后建,由此知道哪个是parent。这是一种方法。
其他用git命令的方式也很多。
比如: git show —pretty=format:%P HEAD
这个命令可以返回HEAD指针的父commit。
再比如:gitk 打开的界面上直接显示Parent
问题:变基rebase的应用场景?(已解决)
作者回复: 其实,rebase就是在改变之前的变更,比如你发现commit的message写得不规范,或者应该合成一个commit的却拆成了几个,又或者一个commit里面一个文件写错了,等等
可能你新建了5个commit,创建时间早的2个需要修改,后3个commit里面的文件不用变动。用rebase命令是可以达到你要的效果的。只是,那3个在你眼里不用改动的commit,由于其父commit发生变化了,所以它们的commit id 也会发生变化。
对于团队中公用的分支,例如发布分支等,禁用 rebase,因为这样会破坏历史的 commit 信息的,将来要溯源、基于构建历史拉取补丁分支等就会带来极大不便
关于我
我的博客主旨:我希望每一个人拿着我的博客都可以做出实验现象,先把实验做出来,然后再结合理论知识更深层次去理解技术点,这样学习起来才有乐趣和动力。并且,我的博客内容步骤是很完整的,也分享源码和实验用到的软件,希望能和大家一起共同进步!
各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人免费帮您解决问题:
-
个人微信二维码:x2675263825 (舍得), qq:2675263825。
-
个人博客地址:www.onlyonexl.cn
-
个人微信公众号:云原生架构师实战
-
个人csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421
最后
好了,关于怎么修改老旧commit的message实验就到这里了,感谢大家阅读,最后贴上我女神的photo,祝大家生活快乐,每天都过的有意义哦,我们下期见!