上一篇文章记录了git中分支的删除以及出现分离头指针的情况,点击查看:【Git、GitHub、GitLab】七 git中分支的删除以及出现分离头指针的情况
使用下面的命令即可
–amend 不只是修改最新commit的message 而是会创建一个将暂存区的内容生成一个commit,再将当前最新的commit替换成新生成的那一个
使用命令:
然后对要修改的message前的cmd改为reword
,保存退出后修改message
其中, rebase -i 会产生分离头指针的状态。
因为:
- git rebase工作的过程中,就是用了分离头指针。rebase意味着基于新base的commit来变更部分commits。它处理的时候,把HEAD指向base的commit,此时如果该commit没有对应branch,就处于分离头指针的状态,然后重新一个一个生成新的commit,当rebase创建完最后一个commit后,结束分离头状态,Git让变完基的分支名指向HEAD。
这里有一个问题就是rebase后面跟的是父commit的哈希值,那么第一个commit的message如何修改?
使用如下命令:
然后对要修改的message前的cmd改为squash
,保存退出后可以在new commit下加一句总体的commit message
在执行这个命令时
- 如果没有指定 结束commit,那么结束commit 默认为当前分支最新的 commit,那么rebase 结束后会自动更新当前分支指向的 commit, 如果指定了结束 commit,而且结束 commit不是当前分支最新的
commit,那么rebase 后会有生成一个 游离的 head,,而且当前分支指向的commit 不会更新
上面是将连续的多个commit 合并成一个,那么如何将不连续的多个间隔的commit合并成一个?
使用下面的命令:
然后将要合并的几条commit的message放到一起(紧挨着最靠前的需要合并的commit),且相关commit前的cmd改为squash
然后保存退出。
后面解决冲突后,先 git add,在git rebase --continue