Git cherry-pick后再merge出现一个“奇怪”的现象

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/voidreturn/article/details/78695365 背景...
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/voidreturn/article/details/78695365

背景描述:有的时候基于一个master branch拉出一个独立feature分支做开发时,两条分支都在并行开发,如果master分支增加了某些功能,解决了某些关键bug,而独立feature分支不需要所有的增加的commit,只需要某一笔的修复,此时首先想到的就是单独cherry-pick该笔commit,然而后续如果再次将该feature merge回master,“奇怪”的现象发生了….

举例说明:

git仓库以ngnix代码为例,不知道什么时候clone的代码,分支还在unstable branch上。。。

  • 以unstable分支为基础checkout一个test1分支。
  • 在unstable分支上提交一笔commit bb3200604fcd3cefe26fb23bd6747f5563f514ac
  • 在test1 branch上cherry-pick该笔commit,commit id为9b97d6038a14e348f50a7b44f2a0a29af54aa820
  • 回到unstable分支,merge test1 branch,出现下面的现象:

    unstable分支merge test1 branch后的graph线路图

为什么感到”奇怪“

  • 起初我的想法时merge合并后,不会出现merge commit,也只会存在同样的一笔commit,这样看起来会很清爽,而如果出现两笔一模一样的commit,看起来会很疑惑。虽然代码没有任何问题,而且如果在提交多笔commit后再merge,大部分人都不会主要到这个现象,所以应该很少人主要到这个“问题”。
  • 由于个人多少对代码有点洁癖,当发现这个现象时蛮奇怪的,为什么git不能智能记录两个branch cherry-pick的过程,在merge时只保留一个(最好是master branch上的)commit?(这点是完全可以做到的啊),不过事实就是目前的状态了。

为什么会这样?

  • cherry-pick在Git中的处理应该只是将一个commit的修改重新add, commit,push到另一个branch上,并没有记录之间的关联。
  • 当merge时,认为另外一个branch只是做了完全相同的修改,并没有冲突,所以完整的保留两个branch上的commit。

后续如何处理

  • 虽然以上的解释很充分,原理上完全没有问题,不过对于这样的两笔一模一样的commit,感官上还是不爽的,所以我决定尽量不在需要merge回去的branch上cherry-pick父branch上的commit了。
目录
相关文章
|
2月前
|
开发工具 git
git merge和git rebase异同
git merge和git rebase异同
67 0
|
4天前
|
开发工具 git
git 拉取代码仓库代码报错(合并错误 refusing to merge unrelated histories)
git 拉取代码仓库代码报错(合并错误 refusing to merge unrelated histories)
13 0
|
2月前
|
Java 程序员 开发工具
|
7月前
|
Ubuntu Linux 开发工具
idea使用git提交代码报异常refusing to merge unrelated histories和unknown option `allow-unrelated-histories‘
idea使用git提交代码报异常refusing to merge unrelated histories和unknown option `allow-unrelated-histories‘
|
3月前
|
开发工具 git
git cherry-pick的使用
git cherry-pick的使用
|
4月前
|
开发工具 git
百度搜索:蓝易云【git常用命令之Merge】
请注意,合并过程中可能会出现冲突,需要手动解决冲突后再进行提交。合并操作应谨慎执行,特别是在重要的项目中,应先进行代码审查或测试,确保合并不会引入错误或不稳定的代码。
172 4
|
4月前
|
开发工具 git 开发者
百度搜索:蓝易云【Git:Rebase和Merge之间的区别】
综上所述,Rebase和Merge在代码合并方面具有不同的特点和用途。根据具体的情况和个人偏好,选择适合的合并方式能够更好地管理和组织代码。
41 0
|
4月前
|
前端开发 开发工具 git
git rebase 和 git merge的区别?以及你对它们的理解?
git rebase 和 git merge的区别?以及你对它们的理解?
68 1
|
4月前
|
Shell 开发工具 git
git 常用命令详解(merge/rebase/cherry-pick)
git常用命令详解。 git merge将已提交的commit(自历史记录与当前分支分开以来的提交)合并到当前分支中。 rebase变基的原理 git-cherry-pick能应用(合并)已经存在的commit,即选择合并某个特定commit
|
6月前
|
测试技术 程序员 Linux
手把手教你用Git——详解git merge
手把手教你用Git——详解git merge
621 0

相关实验场景

更多