cherry-pick(命令行和idea方式),git部分常用命令及一些注意事项
文章分三部分
- 在idea上直接cherry pick
- git命令行加idea来cherry pick,并解决冲突
- 补充的一些命令行以及注意事项
参考链接:idea的cherry pick https://www.jianshu.com/p/b36fc61afb26
方法1.在idea上直接cherry pick
想将develop分支上的几个提交cherry pick到test分支上,
1.将项目切换到test分支上
(1)右击此处
情况1:已经从远程test分支拉取过代码到本地,直接在local branches中选择test分支来切换
情况2:未从远程test分支拉取过代码到本地,本地分支里还没有test分支
为本地分支取个名字,默认是远程分支的名字,这里因为我本地已经有test分支了,所以我将名字改成了test2
将远程分支拉取到本地之后,该修改的东西可能有maven的配置,sdk,该导包导包,不细说了
(2)将git的提交日志切换到develop分支上
也就是说,在test的项目上显示一下develop的提交日志
(3)选中要cherry pick的提交记录(借助ctrl或者shift可多选),点击cherry pick按钮
(4)如果cherry pick成功,会有类似下图的提示,
然后直接git--repository--push就可以看到cherry pick的记录,提交信息就是原有的提交信息
PS:我cherry pick失败了,因为有冲突,所以我转去命令行完成了操作.
后来我整理这篇笔记的时候只有一条可用的提交记录做测试,我cherry pick成功后不需要手动commit,直接push就能看到记录,提交信息就是原有的提交信息
但是网上还有说会先经历commit的过程,见下图
所以cherry pick成功后的步骤大概是这样,要么直接push就行,要么经历commit过程
下图源自链接:
https://www.jianshu.com/p/b36fc61afb26
如果用idea可以cherry pick成功,没有什么冲突,那么我文章剩下的内容可以不看了
(5)如果cherry pick失败,会有类似下图的提示,
idea没有提示我哪里冲突,并且在我的version control---local changes中也没有提示是谁冲突了,因此我打开了git命令行来重新执行cherry pick
方法2.git命令行加idea来cherry pick,并解决冲突
注意:下面我是将test分支上的提交cherry pick到develop分支上的,,为了和上面统一,可以忽视分支名字
原则就是A的提交cherry pick到B上的话,就切换到B分支,git cherry-pick A上面提交记录的版本号
下面不纯粹是命令行的操作,能在idea中解决的,我还是选择在idea中解决了
之前我一直以为本地windows的git装得有问题,所以在项目的文件夹里面右键不会出现git bash的选项(现在我也不知道为什么,求解)
其实git bash命令行是能用的.
打开git命令行窗口,切换到项目的文件夹下
为了把涉及公司项目的部分打码,截图可能不是很好看
项目当前是哪个分支,命令行中就会显示哪个分支,如下红框里的develop
执行的是linux的命令,注意只能是/
cd /d/MyProject
执行cherry pick命令
在idea中找到要cherry pick的提交记录,右键----Copy Revision Number,复制版本号
执行命令git cherry-pick 版本号
(1)成功
在idea上查看version control---local changes中是否有冲突提示(保险起见)
没有的话,就可以push了
(2)失败
失败的话继续执行下面操作
查看git状态
git status
绿色的cherry pick成功的,已经提交了的文件
红色的是cherry pick失败的,有冲突的文件
这些红色的文件会在version control---local changes中出现,并且也是红色的
在idea打开文件解决冲突
全部冲突都解决完就git add,表示该文件已经解决了冲突
(命令行和idea上的git--add应该是有同样的效果,我只试过命令行)
回到命令行,可以直接将上面的红色文件的路径复制一下
然后执行git add 文件相对路径
然后再查看状态,看到所有需要cherry pick的文件都是绿色的,然后就可以push了
补充知识:
1.一般开发都是用develop分支的(下面简称dev),在dev分支上开发,在test分支上测试
因此,代码都提交到dev分支上,dev测试无误之后,如果想打包给测试组,就将dev merge到 test上
不要在test上直接提交代码,也不要将test merge到dev,
保持dev的代码比test更新,或者和test一致
如果想要改bug,在dev上改,改完之后cherry pick到test分支,或者在dev想要修改的节点上拉出一条新分支,修改完毕后,将新分支merge到dev和test
PS:我写命令行这部分内容的时候,是将test的提交cherry pick到dev分支的,这其实是不合规矩的,但是因为一些特殊情况只能如此
2.补充一些git命令
(1)git stash 暂存文件,相当于idea中的git--repository--stash changes
(2)git stash list 显示暂存列表,相当于idea中的git--repository--unstash changes
(3)git stash apply stash@{0} 应用某次暂存,数字0可替换成暂存列表中的其他数字,相当于在idea中的git--repository--unstash changes中点击apply stash
(4)git stash drop stash@{0} 删除某次暂存记录,数字0可替换成暂存列表中的其他数字,相当于在idea中的git--repository--unstash changes中点击drop
注意,删除一条之后,后面的序号会往上移(数字减小),新增一条暂存记录时,最新一条的序号是0,以前的会挨个下移(数字变大)
(5) git update-index --assume-unchanged 文件相对路径 把不想提交的文件忽略,即不会出现在git status中,不会出现在idea的version--local changes中
也可以通过idea来设置要忽略的文件,打开version--local changes,选中文件右键--add to gitignore
PS:我选择忽略的是test文件夹中的东西,但是可能是因为这个东西引用了正式代码(src)中的内容,因此忽略无效
3.cherry pick之后可以取消
已经cherry pick,下面会提示
取消cherry pick,点击abort cherry pick
4.浅蓝色背景的是两个分支同步的地方,白色的是另一个分支有的
7.想要丢弃已经提交的文件,重置到某一节点的状态,可以在idea上点击git---repository---reset head
注意选择hard之后,已经提交的文件,和修改了但是没有提交的文件都会消失
reset type可以参看https://www.cnblogs.com/chenweichu/articles/5819378.html
8.注意:上面需要选择版本号的地方,要小心一点,看好选择的分支是本地分支还是远程分支,如果是本地分支,commit了但是未push的文件也会显示在git的log中,复制错了可能会有不必要的麻烦
cherry-pick(命令行和idea方式),git部分常用命令及一些注意事项相关推荐
- Git 基础 —— 常用命令
Git 基础学习系列 Git 基础 -- 安装 配置 别名 对象 Git 基础 -- 常用命令 Git 基础 -- 常见使用场景 Git基础 -- Github 的使用 git init 创建 Git ...
- Git之(三)Git中常用命令——分支管理
三.Git中常用命令--分支管理 为什么要使用分支管理? 分支就是科幻电影里面的平行宇宙,也就是当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干 ...
- Mac 配置Git与常用命令
Mac 配置Git与常用命令总结 Mac 配置Git 1.Mac Git 安装 2.生成密钥 3.秘钥添加到仓库 Git常用命令 Mac 配置Git 1.Mac Git 安装 Mac一般自带Git工具 ...
- 【Git】Git是什么?简单说说Git的工作机制?Git的常用命令有那些?
目录 一.Git是什么? 二.简单说说Git的工作机制? 三.Git的常用命令有那些?
- 统信UOS命令大全 麒麟系统命令大全 Linux常用命令操作大全(非常全非常详细) ubuntu命令大全常用操作命令大全
[腾讯云]云服务器2核4G74元/年,222元/3年 Linux常用命令大全(非常全!!!)适用于 统信UOS 麒麟kylin 系统信息 arch 显示机器的处理器架构 uname -m 显示机器的 ...
- linux常用命令 打开文件,【Linux】常用命令 lsof查看打开的文件
Linux系统把软硬件都抽象成文件,所以通过文件可以追踪到很多重要信息,如读取的配置文件.打开的端口等. 下面是常见的用法: 默认测试文件名为text.txt 1,显示打开text.txt的进程: l ...
- php基础命令,PHP命令行下的11个常用命令介绍
本文整理了PHP命令行下的11个常用命令,下面介绍给大家,它们分别是php -m.php -v.php --ini.php -h.php --info.php --rf .php --rc .php ...
- Git基础(常用命令)介绍
版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统. 关于版本控制分为三种:本地版本控制系统,如rcs:集中化的版本控制系统,如CVS.SVN:分布式版本控制系统,如Git. Gi ...
- [编辑修订01]git 常用命令和Gerrit的联合使用常用命令
Git常用操作命令分级/以及和Gerrit的联用基础 经常看到如何使用git,但是,往往很多命令都没用过,也没有分级,那些是最常用的,那些是常用的,那些是必须记住的命令.本文根据工作尝试整理一下.默认 ...
最新文章
- Android Stadio配置了gralde的本地路径,但是windos 命令行还是会下载gradle
- 数据结构 线性存储 -- 栈 讲解
- WCF系列学习笔记4之绑定详解
- matlab如何把选中区域标亮
- stack smash_扶手椅VGUX:Super Smash Bros.Ultimate
- 一个有趣的Go项目,3D界面管理k8s集群,真好玩!
- 火星云分发全网视频_好用的短视频一键分发软件,让工作效率提高10倍
- 深度学习-词嵌入(word2vec)
- azw3转换为pdf_干货:如何Java 将 Word 文档转换为 PDF
- FOI冬令营 Day2
- 东软软件动态生成对数据表更新操作的方法
- html新标准,HTML 5新标准将会在2022年正式发布
- 【转】python开发大全、系列文章、精品教程
- php判断手机 跳转代码,php判断客户端是手机设备然后跳转到手机站
- 服务器虚拟机要怎么安装,服务器虚拟机怎么安装
- 全行业产业链图示(摘自企查查)
- 分辨率单位及换算详解
- 解决报错:Source does not fit in dest 异常
- 35岁的程序员:第44章,宿命
- [活动]和Jeffery大师的最近距离