Cherry-Pick、Squash Commits、Rebase使用

这篇具有很好参考价值的文章主要介绍了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的按钮是一个樱桃一样的小图标。
squash commits,git,github,intellij-idea


2、cherry-pick之后,dev2分支有绿色原点,待提交记录。这样就完成了cherry-pick的使用,非常简单。
squash commits,git,github,intellij-idea

squash commits,git,github,intellij-idea


二、Squash Commits

Squash Commits的作用能够将多次提交记录合并成一个。
重复第一个步骤,将dev中四次提交,全部cherry-pick到dev2。选中需要合并的记录,如下图。
squash commits,git,github,intellij-idea

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

squash commits,git,github,intellij-idea

未push合并后的分支前
squash commits,git,github,intellij-idea

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

git push --force

看到远程分支的多次提交记录也合并成功了。
squash commits,git,github,intellij-idea

三、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

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

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

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

squash commits,git,github,intellij-idea
效果如下图
squash commits,git,github,intellij-idea


总结

本文介绍了Cherry-Pick、Squash Commits、Rebase的使用,做一个记录。在使用rebase中,有可能出现冲突,按提示解决冲突。如操作失败,可以abort rebase重新弄,不影响分支信息。文章来源地址https://www.toymoban.com/news/detail-616499.html

到了这里,关于Cherry-Pick、Squash Commits、Rebase使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Git进阶之代码回滚、合并代码、从A分支选择N次提交,合并到B分支【revert、merge、rebase、cherry-pick】

    Git进阶之代码回滚、合并代码、从A分支选择N次提交,合并到B分支【revert、merge、rebase、cherry-pick】

    B站视频地址: https://www.bilibili.com/video/BV1KX4y1a7N9 Git学习文档:https://d9bp4nr5ye.feishu.cn/wiki/PeDPw3mm3iFA36k9td9cVeignsZ 在很长一段时间里,我对Git的操作只限于:提交代码,拉取代码,合并代码。 虽然上面这些操作在日常工作中也足够了,但不会点高级知识不利于装X,今天我们来学

    2024年02月08日
    浏览(18)
  • git 三种合并方式(rebase / merge / squash)

    git 三种合并方式(rebase / merge / squash)

    在使用 Git (分布式版本控制系统),往往不会直接在主分支上面直接开发,而是新建一个分支进行开发。 那么当我们在新分支上面完成一个功能时,便需要合并到主分支。 merge rebase and merge squash and merge 初始化 图 1 图1,初始两个分支的状态,现基于此对合并(merge)和变基

    2024年03月11日
    浏览(14)
  • Git Cherry-pick使用

    Git Cherry-pick使用

    无论项目大小,当你和一群程序员一起工作时,处理多个 Git 分支之间的变更都会变得很困难。有时,与其把整个 Git 分支合并到另一个分支,不如选择并移动几个特定的提交。这个过程被称为 \\\"挑拣\\\", 即 Cherry-pick。 本文将介绍 \\\"Cherry-pick\\\" 的内容、原因和方法。 让我们开始吧

    2024年02月13日
    浏览(13)
  • git cherry-pick 的使用

    git cherry-pick 的使用

            cherry-pick 精心挑选的意思,即可以从一个分支上挑选一个(或多个)修改,提交到当前分支上,不过 cherry-pick 只能是本地操作,即源分支上必须有的commit 才能 cherry-pick。遇到的情况可能是,源分支远程已经有提交了,但在本地的源分支并没有更新到最新,此时 che

    2024年02月16日
    浏览(12)
  • 【GIT】cherry-pick 基本使用

    【GIT】cherry-pick 基本使用

    当我们需要在本地合入其他分支的提交时,如果我们不想对整个分支进行合并,而是只想将某一次提交合入到本地当前分支上,这时候就需要用到cherry-pick操作。 git cherry-pick 简单理解为挑选分支的意思,挑选什么分支呢?就是我们在自己的功能分支上每次的commit提交记录(分

    2024年02月08日
    浏览(12)
  • git的cherry-pick,使用SourceTree遴选

    git的cherry-pick,使用SourceTree遴选

    需求:目前有一个开发分支dev,然后要在dev分支的基础上,检出两个新的分支,做为发版分支,这个分支的功能完全一样,只有logo,title,项目的配置信息不同。怎么在dev分支上开发了新的功能之后,合并到这两个发版分支,并不覆盖这两个分支中的项目配置信息。 步骤过程

    2024年02月03日
    浏览(12)
  • git中的cherry-pick和merge有些区别以及cherry-pick怎么用

    git中的cherry-pick和merge有些区别以及cherry-pick怎么用

    git中的cherry-pick和merge在使用场景上有些区别: cherry-pick用于将另一个分支的某一次或几次commit应用到当前分支。它可以选择性地拉取代码修改。 merge用于将两个分支合并成一个新分支。它会把整个分支上的所有修改都合并过来。 具体区别: cherry-pick通常用于将bug修复从发布分支

    2024年02月09日
    浏览(9)
  • cherry-pick多次

    cherry-pick多次

    git cherry-pick命令执行多次,会怎样?以下通过idea进行演示,先总结结论: 1、cherry-pick无冲突时,仅能执行一次此命令,第二次cherry-pick会直接卡住 2、cherry-pick有冲突时,可执行多次此命令,每次都是拿各分支最新代码让人合并,每次执行都要解决冲突 下面通过idea实际操作,

    2024年02月07日
    浏览(7)
  • git cherry-pick 用法

    git cherry-pick 用法

    说明:本人基于 master 新建分支 master-fxd,那么目标分支为 master-fxd 说明,其他分支例如 dev 提交的代码,使用 jihulab.com 比较 master-fxd 和 dev 分支,下图右侧复制单个提交 id

    2024年02月12日
    浏览(11)
  • Git cherry-pick详解

    Git cherry-pick详解

    此文在阅读前需要有一定的git命令基础,若基础尚未掌握,建议先阅读这篇文章Git命令播报详版 对于多分支的代码库,将代码从一个分支引入到另一个分支是常见需求。 这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并( git merge )。另一种

    2024年02月12日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包