2、cherry-pick合并commit时只合并部分文件方法

tech2022-07-30  157

2、cherry-pick合并commit时只合并部分文件方法

一、需求场景

  我公司开发流程是,先将代码上传到开发分支,在同一个上线时间的开发任务完毕后,将相应的commit通过cherry-pick把代码合并到测试分支,由于我刚入职,不熟悉流程,将两个上线时间不同的开发任务的代码作为一次commit上传了,这下可犯了难了,怎么把这一次commit的第一个上线时间的代码合并到测试分支呢?这时候,经过各种百度,知道了cherry-pick合并commit时只合并部分文件方法,做一下记录,以防万一。

二、 合并步骤

1. 以demo-uat测试分支为例,切换到测试分支,得到想要cherry-pick的commitId

图1 cherry-pick想要的commit

2. 进行cherry-pick,-n表示不自动提交

git cherry-pick -n 40baec5d

图2 执行cherry-pick命令

3. 查看在这次cherry-pick中都修改了哪些文件

git status -s

图3 本次cherry-pick修改的文件

  由图可知,我修改了Sort.java文件和FinalizeEscapeGC.java两个文件,但我只想提交Sort.java文件,不想提交FinalizeEscapeGC.java文件,接着执行以下操作。

4. 将FinalizeEscapeGC.java文件从暂存区中去掉

git reset HEAD FinalizeEscapeGC.java

图4 将不要的文件从暂存区去掉

  由图可以看到,经过reset后,再次查看修改的文件,在FinalizeEscapeGC.java文件的前面的M变红了,这代表已经将暂存区的文件去除了。

5. 将FinalizeEscapeGC.java文件彻底从demo-uat分支舍弃

git checkout src/main/java/com/example/demo/test/FinalizeEscapeGC.java

图5 将不要的文件彻底舍弃

  由图可以看到,在执行这行命令后,重新看状态,FinalizeEscapeGC.java文件已经彻底消失了。

注意:

  当发现在查看状态时,有其他的文件存在,并且前面都是??的状态,这表示这是未跟踪文件,可以使用以下命令清除。

git clean -f

  如果想先看看会清除哪些文件,可以使用以下命令查看确认后再清除。

git clean -nf

6. 获取这个commit的提交信息

git log --pretty=format:提交者:%an,提交时间:%ad,提交说明:%s 40baec5d -1

图6 获取commit提交信息

7. 使用之前的提交信息,重新将Sort.java文件提交到测试分支

git commit --author=xylizh --date="Tue Sep 1 21:31:27 2020 +0800" -m "提交排序注释"

图7 将文件提交到本地仓库

  到这里,已经几乎完成了,只剩下最后一个push动作了。

图8 推送到测试分支

  至此,大功告成!成功在一个commit里,提交了Sort.java,放弃了FinalizeEscapeGC.java。

三、 总结

  这个需求应该不算常用到,但毕竟也算是一个git的技巧吧,同时,根据公司的情况提交方式做一下调整,以我为例,在开发的时候,最好是每一个任务做一次单独的代码提交,这样不论是之后根据任务回溯代码,还是将开发分支合并到测试分支,都能够灵活的处理,也算是吃一堑,长一智吧。

参考博客:https://blog.csdn.net/b229911288/article/details/103608482

参考博客作者:少年元芳

最新回复(0)