惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google Online Security Blog
Google Online Security Blog
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
Jina AI
Jina AI
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美
V
V2EX
雷峰网
雷峰网
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog
F
Full Disclosure
Y
Y Combinator Blog
V
V2EX - 技术
Attack and Defense Labs
Attack and Defense Labs
S
Security @ Cisco Blogs
Schneier on Security
Schneier on Security
Microsoft Azure Blog
Microsoft Azure Blog
SecWiki News
SecWiki News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The GitHub Blog
The GitHub Blog
量子位
PCI Perspectives
PCI Perspectives
S
Secure Thoughts
D
Darknet – Hacking Tools, Hacker News & Cyber Security
AWS News Blog
AWS News Blog
Blog — PlanetScale
Blog — PlanetScale
爱范儿
爱范儿
K
Kaspersky official blog
B
Blog
A
Arctic Wolf
Hacker News: Ask HN
Hacker News: Ask HN
L
LangChain Blog
T
Tor Project blog
P
Privacy & Cybersecurity Law Blog
Recent Announcements
Recent Announcements
宝玉的分享
宝玉的分享
The Register - Security
The Register - Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
Lohrmann on Cybersecurity
D
Docker
A
About on SuperTechFans
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
The Last Watchdog
The Last Watchdog
S
Security Affairs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy International News Feed
Simon Willison's Weblog
Simon Willison's Weblog

博客园 - smil、梵音

TortoiseGit 的安装与汉化 安装虚拟机+ ubuntu24.04 系统 联想小新安装 ubuntu24.04 双系统 | 安装乌版图系统 | windows安装 ubuntu24.04 双系统 利用faststone capture制作gif动图 Sublime Text 常用编辑快捷键速查表 vscode 中的 css 样式代码不显示折叠图标的解决方法 IDEA中git的Cherry-Pick的可视化使用(个人总结) IDEA中git的Cherry-Pick的使用 Windows11添加系统环境变量 VS Code——Live Server的简介、安装与使用 vue3中 pinia 的运用 vscode使用region折叠任意想折叠的代码块 我本地分支代码推送到远程的另一个分支,怎么操作? idea中打开多文件编辑器换行展示 本地代码强制覆盖远程代码,本地代码强制和远程某一个分支保持一致,再覆盖远程代码 css头部固定,内容区域高度自适应剩余的屏幕高度,内容区域过多显示竖向滚动条 flex为1的元素宽度自适应的同时,文本太长的时候显示省略号 idea中项目文件目录消失如何解决 vue3插入图片 vue3使用构建工具时,关于本地图片的引用 vue3 中父组件调用子组件的方法,子组件是不是必须暴露方法 如何改变type="checkbox"的input复选框的样式 vue3中非父子组件、非祖先-后代组件之间传递方法 解决 IntelliJ IDEA 中项目右键没有 Git 菜单的问题 关于 ref 为 DOM 元素或子组件实例动态创建引用的总结 Git 合并时出现 Please enter a commit message to explain why this merge is necessary 问题解决 拉取远程其他分支的最新代码 - smil、梵音
IDEA中如何实现git的cherry-pick可视化操作?
smil、梵音 · 2026-04-01 · via 博客园 - smil、梵音

问题现象:
        今天在学习了git的cherry-pick功能,于是引出了一个问题:
        IDEA中如何实现git的cherry-pick可视化操作?


问题分析:
        首先,来了解一下 git 的 cherry-pick 功能是什么?


        1、先说说命令格式:
          git cherry-pick commit记录的id标识


        2、再说功能:
          git cherry-pick:用于把某一个代码分支的commit修改合并到当前的代码分支。


乍一看,发现和merge有点类似,区别就在于: 

  merge:是把某一个代码分支完全合并到当前的代码分支。完全合并的意思就是合并之后,当前分支与被合并的分支的所有文件都是保持完全一致的

  cherry-pick:可以精确地将某一个分支上的某一次commit提交操作的改动,合并到当前代码分支,即合并之后,当前分支与被合并的分支被commit操作改动的文件是保持完全一致的,但其他文件就不一定了。

 3、最后说说好处:

        3.1、当被合并分支存在多个commit提交记录,有时候并不是所有的commit提交记录,都是当前分支所需要的,因此我们可以根据commit提交记录来合并我们实际所需要的即可,这是merge做不到的。

        3.2、以commit记录为单位的合并,可以让当前分支的合并信息更加清晰详细,cherry-pick会默认把commit记录带入合并操作中,可以清晰地知道当前分支中做了什么操作,保证了当前分支和被合并分支的commit记录一致性。而merge则是一次性合并,无法写日志,也无法根据commit记录来清晰地知道当前分支被改动了什么内容,只能通过查看合并记录所影响的文件或被合并分支的commit记录,这样有一定的缺陷。


        不过这也是见仁见智的,因为merge的完全合并确实是省时省力,而cherry-pick则是追求颗粒度。因此 cherry-pick 适用于被合并分支的commit记录较少的时候,例如:
        测试人员会根据每个bug进行问题记录和派发,开发者在收到问题记录后,就需要针对各个bug进行问题消缺,每 解决 一个bug就commit一次,然后就可以根据下次测试计划中需要验证的bug来对commit记录进行一一cherry-pick。

解决方法:

        1、先保证IDEA底部 菜单栏 中有 Version Control 项;如果没有可以尝试通过以下2个方法来调出:

        1.1:按快捷键 alt+F9

        1.2:点击顶部菜单栏中的 View - Tool Windows - Version Control

图片

2、点击底部菜单栏 Version Control - Log ,右下角可以看到我当前分支是(develop),之前我已经提交了几个记录在分支(task/111-001-测试git的stash功能),如图:

图片

3、选中想要合并的commit记录,右击 - Cherry-Pick :

图片

弹出窗口后,左边选中本次commit记录所改动的所有文件,右边点击Accept Theirs:

图片

弹出窗口,可以看到被合并分支的commit记录的日志也被获取过来了,点击Commit and Push

图片

弹出提示窗口,大概意思就是说正在解析本次commit合并的代码,右下角可以看到有2 processes running...的字样,这里直接忽略即可,点击Commit:

图片

commit&push成功:

图片

 至此就实现了IDEA中git的cherry-pick可视化操作。

拓展:如何回退提交记录?

        因为有时候我们误操作了,或者合并错了等等情况,所以这里再提一下如何回滚/回退已提交的记录:

        1、首先要保证commit记录是当前分支的,因为在其他分支的提交记录上操作是无效的:

图片

2、选中想要回退的commit记录,右击 - Resert

图片

弹窗commit窗口,这里可以Commit一次,用于记录本次回退操作;也直接关闭或Cancel掉,

 这样就不会记录本次回退操作,这个看实际情况而定吧,反正不管是否提交,都会回退成功

图片

要是你又误操作了,发现不该回退,或者回退的不该是当前的commit记录,则可以对之前cherry-pick 合并成功之后的commit记录上进行cherry-pick即可,该操作不需要再次commit记录日志,所以非常方便:

图片

另一种回退操作,Reset Current Branch to Here ,这种是可以把当前分支回滚到历史commit记录中的某个状态:

图片

弹出窗口,这里我选择了Keep,意思是回退之后,保持当前分支的改动,例如(我现在先创建了一个新文件,之后再点击回退,则回退之后,这个新的文件依然存在,而不会丢失)。

图片


原文链接:https://blog.csdn.net/weixin_42585386/article/details/128256149