在项目实践中,我们经常会遇到以下场景,需要结合git命令来进行操作。

一 合并多个已经push的commit

这种情况分两种情况:

  1. 只有一个分支,基于当前分支合并,多用于自己写项目玩玩。
  2. 当前的工作分支只是一个子分支,比如是基于develop(主分支)新建的分支,还有很多小伙伴基于develop分支创建分支,然后合并代码到主分支,这种情况在实际项目中比较常见。

对于第一种情况,如果想要合并前面已经push的几次commit,比如前三次,网上有很多地方提到,使用下面的命令就好:

git rebase -i HEAD~3

// or

git log //先获取commit log, 找到想要rebase的commit id(a027673196c2101e512893641b92c60cb60c3920)

git rebase a027673196c210  //取前几位就行

git rebase之后会弹出相应的vi编辑器,按键盘上的‘i’,进入编辑模式, 根据自己的需求把后两行的需求改成 'f' 或者 's',f 和 s代表的意思在下面Commands有详细的解释,如果不想看,可以无脑改成 'f'. 然后在键盘上按  ':wq' 退出并保存。这时候rebase就开始了。

注意:如果rabase过程中有冲突,先去处理代码冲突(我一般在vscode中直接处理)。然后

git rebase --continue

rabase成功后,git push -f,再提交一次,就会发现之前的N多次commit已经合并成一个了。

对于第二种情况,因为develop分支是不断变化的,其他人merge代码到develop,我们为了以后自己的代码提PR时没有冲突,把当前develop最新的代码也更新到自己的分支(这个是另一个知识点),然后,自己也提交了commit,这种情况下,commit记录就会比较混乱,既有merge develop的记录,也有自己真正commit的记录,也有可能有pull的记录,这个时候,我们需要下面的命令来合并commit:

git rebase -i origin/develop //develop换成你的主分支名字

剩下的操作和上面基本一致,不赘述。

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐