作者回复: git rebase工作的过程中,就是用了分离头指针。rebase意味着基于新base的commit来变更部分commits。它处理的时候,把HEAD指向base的commit,此时如果该commit没有对应branch,就处于分离头指针的状态,然后重新一个一个生成新的commit,当rebase创建完最后一个commit后,结束分离头状态,Git让变完基的分支名指向HEAD。
后续课程我们再把这个过程通过详细的图示给大家展示一下。这个阶段不妨先尝试用一下。
作者回复: 很好的发现! 那是因为 message 也是commit的属性,是确定commit的hash值的一个因子。其次,second_commit 有个 parent 的属性,parent的内容发生了变化,因此,second_commit 的hash也变了。
以此类推,后面的commit也发生了变化。
作者回复: blob是只看内容的,两个文件如果内容相同,对应的blob是相同的,即使这俩文件在不同的git仓库。
但commit还包括commit的message,作者,变更时间,父亲等属性,这些🀄️的一个发生变化了,在git眼里就是不同的commit。
如果前3个commit的message变了,前3哥commit就变了,它一变,前2个commit的parent就变了,因此前2个commit也要变,依此类推
作者回复: 搜索工具可以根据 “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” 即可
作者回复: 这个google搜一下 “git editor 某个编辑器”,就有答案的。
比如我用 vsc 编辑器,搜索后得到 :
https://stackoverflow.com/questions/30024353/how-to-use-visual-studio-code-as-default-editor-for-git
测试了有效
作者回复: 说的很好。rebase通常用在还没有提交到集成分支之前。
作者回复: 因为commit 的属性包含创建时间和commit message这些信息
作者回复: 尚未提交到远端服务器的commit,是可以rebase的。
作者回复: 不防看一下视频18,最初始的commit也可以变。