赞
踩
背景
在项目开发中,我们常常需要修改已经提交的记录。git rebase的功能不仅在于合并分支,还可以重写历史提交,修改提交顺序,删除某一笔提交,修改提交信息,合并提交,以下内容是我参考git book中的内容和自己工作时的经验。
合并分支,变基
使用rebase来进行合并分支,在CSDN中有非常多的文章的来讲解,包括和merge之间的差异,在这里就不过多讲解了。在实际开发过程中,使用git rebase进行合并分支,是比较常见的,尤其是在提交MR之前,我们会检查我们的开发分支是否是基于主干最新的提交,如果是,那么git rebase和git merge效果一样,如果此时主干分支已经有新的提交,我们就可以使用git rebase将我们的开发分支基点变更到主干最新提交上,当然这里可能会有冲突,和merge方式一样去解决冲突,合并即可。
合并本地commit
在开发过程中,我们往往会有多笔提交,多笔提交只是一个需求,但是我们已经提交多个commit记录,这时我们可以进行合并提交记录,有两种方式进行合并
使用git reset再重新提交
# 将提交记录重置到初始
git reset commit-id --soft
# 重新提交
git add .
git commit -s
使用git reset --soft 可以保留工作区的内容,将版本库中的commit记录给重置到指定的commit-id,然后再进行提交修改。使用reset会把分支的commit记录给清楚,建议将操作分支备份,不然有丢失修改的风险。
使用git rebase进行合并分支
# 合并最近三笔提交
git rebase -i HEAD~3
# 将commit-id前的 pick 改为 fixup或者squash ,或者使用简写 f 和 s
# 使用fixup会丢弃commit信息,使用squash会保留commit信息
更改commit提交信息
如果是最近的一笔提交的话,我们可以使用git commit --amend
来进行修改commit信息,但是如果是再靠前的commit提交就无法更改了,这时可是使用rebase。
git rebase -i HEAD~5
# 将commit-id前的 pick 改为 reword 或者 r,进行修改
修改某一笔commit,或者在某笔提交后新增提交
在变基信息的表中,将pick修改为edit,就会让rebase停止在这笔提交上,使用git commit --amend进行修改提交,即可修改提交
使用git commit 就会在这笔提交后新增一笔提交
删除某一笔commit
在变基信息的表中,将pick修改为drop,可以删除这笔提交记录
修改提交顺序
在变基信息的表中的commit行进行调整,可以改变提交顺序
去除merge节点
使用git merge后会生成一个merge节点,有时不想要这个merge节点可以使用git rebase去掉
# 如果merge 时没有冲突,可以直接将merge节点去除
git rebase -i HEAD~1
在git book中提到
Git 并不会尝试过于聪明的合并冲突解决方案,Git 的哲学是聪明地决定无歧义的合并方案
所以,git中的冲突非常普遍,而git中有一些非常不错的工具来帮助我们进行版本管理,git rebase就是一个非常强大的工具,不仅可以进行变基,去除多余的合并分支,实现简化合并流程的效果,也能够变动历史提交记录,让我对历史上的某笔提交进行修正或者删除。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。