前言
在咱们应用 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-pick
:git cherry-pick --quit
,此时不会回到操作前的状态
罕用配置项
-e: 批改提交信息,如果不批改,则应用合并过去的 commit 的提交信息
-x: 标记起源 commit,会在提交信息里标记起源的 commit 哈希,不便当前追究。-n: 只批改工作区和暂存区的代码,而不产生新的 commit。这时候能够本人提交或者做其余批改后提交
Enjoy it !
版权申明
转载请注明作者和文章出处
作者: X 学生
https://segmentfault.com/a/1190000023414791