前言

在咱们应用Git进行日常开发的过程中,经常须要进行的操作就是代码合并了。常见的操做命令是 git merge branch-name,这个命令会合并的是整个分支的commit,然而有时候咱们须要的可能是仅仅某一个 commit或者某几个commit,这时候就须要用到git cherry-pick了。

git cherry-pick的作用就如它的名字一样,精心筛选。咱们能够精心筛选其余分支上的 commit 合并到以后的分支上来。

原理

git cherry-pick 能够把其余分支的某个commit利用到以后分支,并且主动生成一个新的 commit 进行提交,因而这两次commit的哈希值是不一样的,属于不同的commit

根本用法

单个commit合并

git cherry-pick commit-hash/branch-name

如果应用的是哈希值,则会把对应的commit合并过去,如果是分支名,则会把对应分支的最新一次commit合并过去。

多个commit合并

# 1、 扩散的commitgit cherry-pick commit-hash1 commit-hash2# 2、间断的commit# Git 1.7.2 版本当前,新增了反对批量cherry-pick # 能够将一个间断的工夫序列内的间断commit,进行cherry-pick操作。# 合并(start,end]之间的提交,不蕴含startgit cherry-pick start-commit-hash..end-commit-hash # 合并[start,end]之间的提交,蕴含startgit cherry-pick start-commit-hash^..end-commit-hash 

留神
无论是对单个 commit 进行 cherry-pick ,还是批量解决,留神肯定要依据工夫线,按照 commit 的先后顺序来解决,否则会有意想不到的问题。

如何解决抵触

代码合并不可避免的就是会遇到代码抵触了,git merge会遇到抵触,同样的git cherry-pick也会遇到代码抵触,那么遇到代码抵触的时候,该如何解决呢?

遇到抵触的时候,Git会给出报错信息,并停下来,要求用户解決 conflict 的问题。Git会把所有抵触的文件列在Unmerged paths的中央,能够通过git status查看,如下图。

此时咱们有以下解决计划:

  • 解决抵触

    • 批改抵触的中央,并通过命令git add .把文件重新加入暂存区。
    • 持续合并,git cherry-pick --continue
  • 回退所有批改:git cherry-pick --abort,此时会回到操作前的样子
  • 单纯退出cherry-pickgit cherry-pick --quit,此时不会回到操作前的状态

罕用配置项

-e:批改提交信息,如果不批改,则应用合并过去的commit的提交信息-x:标记起源commit,会在提交信息里标记起源的commit哈希,不便当前追究。-n:只批改工作区和暂存区的代码,而不产生新的commit。这时候能够本人提交或者做其余批改后提交

Enjoy it !

版权申明

转载请注明作者和文章出处
作者: X学生
https://segmentfault.com/a/1190000023414791