关于git cherry-pick命令和使用过程中的理解

关于git cherry-pick命令和使用过程中的理解:git cherry-pick [commit id]命令是专门来同步同一个仓不同分支上的内容,例如
同一个项目(必定是同一个仓库)在开发过程中创建出了许多分支,假如有a分支非常稳定是发布版,b分支是专门用来测试新功能的,现在想把b分支的一个比较眼前一亮的功能同步到a分支上,由于开发进程的推进,现在肯定不能合并b分支到a分支上来,否则就会出现各种冲突和bug甚至崩溃,出现这种情况,那么该命令就十分适合这种场景了;在使用该命令同步各个commit id时肯定会出现hint冲突提示,如果出现冲突使用git status ./命令先看看是哪些文件冲突了,无非就是add by us / both modified / delete by us /delete by them等等这些提示!
理解这些冲突的前提是先明白谁是us谁是them,按照之前的例子,需要把b分支同步到a分支上来,人肯定是在a分支上工作,那么us就是a分支,them是b分支,那么delete by us冲突就是在同步某个commit id过程中发现,b分支上有个文件是a分支上没有的,所以冲突提示是被本分支删除了,提交之后就会在本分支(a分支)上创建该文件,再来说下add by us,没有具体试验过,个人感觉是在b分支的某个目录执行了git commit -a命令,所以在执行git cherry-pick命令时会将a分支上的这个目录全部同步,结果发现a分支上有某个文件或者文件夹是b分支上没有的,所以提示add by us,其实这些冲突都可以不去理会,可以直接使用git commit -a去提交,后果无非就是添加或者删除该文件,不要紧的,但是有一个冲突提示必须手动解决,就是both modified,因为一旦执行了git cherry-pick命令出现both modified冲突提示那么该文件肯定有<<<<<<<和=======以及>>>>>>>,并且还带有该次commit id的提交日志信息,这些东西肯定会造成程序编译不过去,所以必须手动解决冲突,如果不是程序文件,出现这些东西并不会造成什么后果,其实也可以不用理会,直接git commit -a也是可以的,另外需要知道<<<<<<<和=======之间的内容是本分支上(a分支)修改的内容,=======和>>>>>>>之间的内容是b分支(them)修改的内容;还有就是在执行git cherry-pick [commit id]命令时出现The previous cherry-pick is now empty, possibly due to conflict resolution的提示,那么就是a分支上和b分支关于在该commit id的修改内容上已经是一致了,不需要同步了;

猜你喜欢

转载自blog.csdn.net/wzh048503/article/details/79806677
今日推荐