HEAD
单独一个HEAD
eg:git diff HEAD
表示当前结点。
HEAD~
HEAD~只处理当前分支。
注意:master分支的上一个结点是tmp分支的所在的结点fc11b74, 79f109e才是master的第二个父节点。
HEAD~
当前结点的父节点。
HEAD~1
当前结点的父节点。
HEAD~n
当前结点索引为0,n为当前结点之后的第n个结点。
HEAD^n
这个是用来处理一个由多个分支合并而来的结点和他的各个第一级父节点之间的关系的命名。
查看git diff的案例。
git rebase -i HEAD~n
作用:变基(合并)当前结点到当前结点之前的第n个父亲结点,索引从1开始。
`-i` 参数是 `--interactive` 的缩写,表示我们要进行交互式变基。交互式变基是一种在变基操作的同时对提交历史进行编辑的方法,通常用于合并、压缩、移除提交等操作。
git rebase虽然用于合并提交,但是本质上是变基。
git rebase -i HEAD~n
指定需要可以变基合并的所有结点,索引从1开始。
注意:merge的结点计算入内。
在交互式界面中会列出所有选择的结点commit id,最下面是第一个结点,我们可以往上选择删除结点,保留我们需要保留的基结点。
git rebase -i HEAD~
同git rebase -i HEAD~1。
git rebase -i HEAD~4
变基前:
目的:以11111作为基结点,合并前面三个结点。
所以-i 交互界面中,保留tmp和1111,其他的删除。
变基后:
原则:以谁作为基结点进行变基,就~指定到谁的索引,索引从1开始。
注意:基结点不会变,合并后被保留,只是集结点之前的结点被合并。
交互模式下:如果不删除任何结点,那么就表示以第二结点为基结点,重新生成第一个结点。
不删除任何结点:
没有任何变化。
git reset和git rebase的异同
相同点:都可以用于合并结点。
不同点:git reset 回退到旧结点。git rebase 会合并生成新的结点。