乐趣区

关于git:git-cherrypick挑选指定commit来合并

前言

在咱们应用 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、扩散的 commit
git cherry-pick commit-hash1 commit-hash2

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

# 合并 [start,end] 之间的提交,蕴含 start
git 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

退出移动版