git 修改之前的某次commit 注释和常见问题和解决方法_git修改某次commit的comment-CSDN博客
git rebase 用法详解与工作原理 | Shall We Code?
git merge
有两个分支 branchA branchB ,初始时,branchA在C1 节点 基于此节点,拉出branchB
以下操作按照时间顺序
对branchB进行修改 C2
对branchA进行修改 C3
对branchB进行修改 C4
将branchB merge 到branch A
可以看出merge的树是以不同branch体现的,不能完整体现时间顺序
git rebase
此时 reset一下merge操作:
随后将branchB 通过rebase的方式合并到branchA
可以看出 先将branchA的head移动到最新的branchB,再将branchA的修改添加回branchA。合并操作不会产生新的节点
对于单独一个分支的rebase
假如我们对当前分支的某次历史提交执行 rebase
,其结果就是会将这次提交之后的所有提交重新应用在当前分支,在交互模式下,即允许我们对这些提交进行更改。
git rebase -i HEAD~4
可以看到后面的提交都变了ID
git rebase -i HEAD~6
多rebase几个,但是修改还是修改同样的地方,那还是修改后的节点ID改变。
利用rebase 修改历史提交的comment
对于一直使用rebase操作的代码,修改历史comment十分简单,
比如我想修改branchB C2 那次的log
git rebase -i HEAD~3
这件事不会影响branchB 也不会影响branchA的提交顺序。但是会导致branchA重新增加comment的提交以及之后的提交的hashID改变。
对于使用merge的代码进行message修改,就比较复杂
此时要修改branchB 中C2 节点 9d3282c 的名字
git rebase -i HEAD~3
似乎列出的是branchA分支上最后三次的操作,当然也包含branchB上的
会失败,原因是:rebase之后相当于把branchB C2 C4两个节点的内容加入到 branchA C3这个节点后,在对比banechB C2 9d3282c 和 22279e0时 出现了不一致的问题。在此猜测 能merge成功是因为merge对比的是8f4cda7 和 22279e0。
先abort这次rebase, 恢复原样
git rebase -i HEAD~2 去修改C4节点 message 8f4cda7 也不行, 感觉是branchA已经包含了branchB那些修改。再搞个干净的分支。
新来一个分支 验证merge的代码如何修改message
现在想修改branchC newnode2 0b21277 那次message
git rebase -i HEAD~2
首先 修改了该提交的message, 其次,也运行了rebase。 将branchC的改动接到了branchA后面 (注意 如果是rebase branchC 那么是把branchA改动接到C后面。 但是我们这里运行rebase head 也就是rebase branchA 那么 就是把C的改动接到A后面。
反正本地rebase 不对劲就–abort