合并提交
将第二个和第三个提交合并到第一个提交中,可以按照以下步骤操作:
-
执行
git rebase -i HEAD~3
命令,这将打开一个编辑器窗口,并列出最近的三个提交(假设你要合并最近的三个提交)。 -
在编辑器窗口中,将最后两个提交的操作从
pick
改为squash
或者s
:
pick d8c15d9 第一个提交squash af4157a 第二个提交squash 5f6cf5a 第三个提交
- 保存并退出编辑器窗口,这将开始执行重写历史的操作。
- 在下一个编辑器窗口中,你可以编辑合并后的提交信息。默认情况下,所有提交的信息将被保留,你可以将这些信息合并到一个更有意义的提交信息中,以便更好地描述该提交的内容。
- 保存并退出编辑器窗口,这将完成提交历史压缩。
- 使用
git log
命令检查提交历史,确保你已经正确地重写了提交历史。 - 最后,使用
git push --force
命令强制推送你的修改,这将更改远程仓库的提交历史。
注意执行 git push --force
命令时,将影响所有使用该仓库的人。如果你确信你的修改是正确的,并且没有任何人在使用该代码仓库,那么就可以安全地使用该命令。否则建议先与团队协商。
rebase 执行流程
- 找到两个分支(即当前所在分支和要 rebase 的目标基础分支),然后将这两个分支最近的公共祖先节点确定下来
- 接着检查当前分支比这个祖先节点多出了哪些提交记录。具体地说,rebase 就是利用 git diff 找出要被转移的“差异”集合。这样就得到了一个补丁序列
- 将这个补丁序列按照顺序依次应用到目标分支上,直到所有 UTU 任务完成。
因为每次在使用 rebase 命令时都需要制作一系列修改并 apply 它们,所以 rebase 可能会导致一些代码冲突产生。如果存在代码冲突,在apply过程中会暂停进行提示并等待我们手动处理冲突。该操作持续到最后一个修改应用完毕,或者用户解决好所有与工程修改相违背的行为才结束。
通过 rebase 我们可以让两条平行的不同历史线变成一条连续的主干,从而简化项目历史记录,并使项目更易于管理、理解和维护。
c