0


Cherry-Pick、Squash Commits、Rebase使用


文章目录


前言

在Git多分支开发场景下,常常会遇到把a分支的提交记录代码复制到b分支,将多次提交记录合并成一个提交等问题,以下将介绍使用IDEA如何快速的实现这些功能。


一、Cherry-Pick

cherry-pick的意思是挑选,它会获取某一个分支的单笔提交,并作为一个新的提交引入到你当前分支上。使用场景就是,不想merge整个分支的代码到当前分支,就可以使用cherry-pick了。


以下展示IDEA中如何快速使用cherry-pick
1、如下图中,当前分支为dev2,目标分支为dev。这里将演示从dev分支cherry-pick部分提交记录到dev2分支中,cherry-pick的按钮是一个樱桃一样的小图标。
在这里插入图片描述


2、cherry-pick之后,dev2分支有绿色原点,待提交记录。这样就完成了cherry-pick的使用,非常简单。
在这里插入图片描述

在这里插入图片描述


二、Squash Commits

Squash Commits的作用能够将多次提交记录合并成一个。
重复第一个步骤,将dev中四次提交,全部cherry-pick到dev2。选中需要合并的记录,如下图。
在这里插入图片描述

Squash之后,会将多个提交信息展示出来,修改成自己需要的信息即可。
在这里插入图片描述
看Event Log可以发现,Commited Squashed成功了,右下角出现了蓝色和绿色的原点。这时不要去fetch/update分支代码,因为此时只是在local合并成功了,远程分支还是四个记录,所以就会出现远程分支有未获取的记录。此时,直接push合并的记录到远程分支即可。

在这里插入图片描述

未push合并后的分支前
在这里插入图片描述

打开git bash,输入命令强制push上去。

git push --force

看到远程分支的多次提交记录也合并成功了。
在这里插入图片描述

三、Rebase

以上cherry-pick的操作实际上是通过git的rebase命令去进行合并的。

git rebase -i 命令可以压缩合并多次提交
格式:git rebase -i[startpoint][endpoint]

其中-i的意思是–interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。

  • pick:保留该commit(缩写:p)
  • reword:保留该commit,但我需要修改该commit的注释(缩写:r)
  • edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
  • squash:将该commit和前一个commit合并(缩写:s)
  • fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
  • exec:执行shell命令(缩写:x)
  • drop:我要丢弃该commit(缩写:d)

参考:https://blog.csdn.net/w57685321/article/details/86597808


此处展示两种常用的使用方式:

// 合并最近的两次提交
git rebase -i HEAD~2

在这里插入图片描述
按i进入编辑,可以修改pick为fixup,表示使用commit,但是忽略掉comment。修改好后,按Esc退出,在wq保存即可。
观察提交记录和信息,可以看到合并两个请求成功了。
在这里插入图片描述
另一种方式如下:

// 合并从当前head到15f745b(commit id)git rebase -i 3261b8f5 

这里3261b8f5 是我first commit记录的hash值,同样出现vi编辑框,选择需要的信息wq保存退出即可。

在这里插入图片描述
效果如下图
在这里插入图片描述


总结

本文介绍了Cherry-Pick、Squash Commits、Rebase的使用,做一个记录。在使用rebase中,有可能出现冲突,按提示解决冲突。如操作失败,可以abort rebase重新弄,不影响分支信息。


本文转载自: https://blog.csdn.net/qq_43313220/article/details/128839100
版权归原作者 异常捕获大师 所有, 如有侵权,请联系我们删除。

“Cherry-Pick、Squash Commits、Rebase使用”的评论:

还没有评论