作者回复: 搜索工具可以根据 “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” 即可
作者回复: 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也要变,依此类推
作者回复: 这个版本树如果是自己创建的,我们肯定事先知道哪个commit先建,哪个commit后建,由此知道哪个是parent。这是一种方法。 其他用git命令的方式也很多。 比如: git show —pretty=format:%P HEAD 这个命令可以返回HEAD指针的父commit。 再比如:gitk 打开的界面上直接显示Parent
作者回复: 尚未提交到远端服务器的commit,是可以rebase的。
作者回复: sublime编辑器修改后,直接打开git bash命令行窗口,用 git status看一下状态。
作者回复: 其实,rebase就是在改变之前的变更,比如你发现commit的message写得不规范,或者应该合成一个commit的却拆成了几个,又或者一个commit里面一个文件写错了,等等 可能你新建了5个commit,创建时间早的2个需要修改,后3个commit里面的文件不用变动。用rebase命令是可以达到你要的效果的。只是,那3个在你眼里不用改动的commit,由于其父commit发生变化了,所以它们的commit id 也会发生变化。
作者回复: 这个google搜一下 “git editor 某个编辑器”,就有答案的。 比如我用 vsc 编辑器,搜索后得到 : https://stackoverflow.com/questions/30024353/how-to-use-visual-studio-code-as-default-editor-for-git 测试了有效
作者回复: 说的很好。rebase通常用在还没有提交到集成分支之前。