Git使用小技巧之挑拣合并

想要获取更多文章能够访问个人博客 - 代码无止境git

先想一想一个状况,如今咱们有一个功能急须要发布到线上,可是这个功能相关的代码所在的测试分(test)支有不少不该该发布的代码,那么这个时候咱们就须要将与这个代码相关的提交选择性的合并到master上并发布。若是你还不知道git cherry-pick命令的话,颇有可能你会从master分支上检出一个新分支,而后在把相关的代码copy到新分支上而后再合并回master。固然这么作确实能够达到最终的目的,可是手动copy很容易遗漏某些东西,那么咱们这篇文章就来说解一下git cherry-pick命令。bash

准备

1.准备一个空的git仓库,并建立一个readme文件而后提交。并发

mkdir git-test
cd git-test
git init
touch README.md
git add README.md
git commit -m "第一次提交"
复制代码

2.基于master建立一个新的分支dev测试

git checkout -b dev
复制代码

3.修改两次README.md文件,并commit两次。执行git log后咱们会看到以下内容:ui

$ git log
commit cc04beabf0678f54bf64635bd56160c78b0aa1e6 (HEAD -> dev)
Author: 代码无止境 <gancy.programmer@gmail.com>
Date:   Mon Jun 17 18:35:44 2019 +0800

    第三次提交

commit 32259aa35d0702d2d05c648938798f9a5bd4b9e7
Author: 代码无止境 <gancy.programmer@gmail.com>
Date:   Mon Jun 17 18:35:23 2019 +0800

    第二次提交

commit e7f478807d478a0c3e0af8659e0733a9d5b32c8b (master)
Author: 代码无止境 <gancy.programmer@gmail.com>
Date:   Mon Jun 17 18:34:09 2019 +0800

    第一次提交
复制代码

git cherry-pick

通过上面的步骤一个git cherry-pick的使用场景就已经被咱们模拟出来了。假如说咱们如今dev上的第二次提交就是咱们如今急须要发布的功能,那么咱们就须要使用git cherry-pick命令将此次提交合并到master分支上。 1.在dev分支上执行git log命令,找到目标commit的commitid. 2.切换到master分支spa

git checkout master
复制代码

3.执行git cherry-pick命令code

git cherry-pick 32259aa35d0702d2d05c648938798f9a5bd4b9e7
复制代码

4.再次执行git log命令就能够看到目标提交已经被合并到master上了get

$ git log
commit 845d18e1193e4ad4361c8065173ed9b96fcc5227 (HEAD -> master)
Author: 代码无止境 <gancy.programmer@gmail.com>
Date:   Mon Jun 17 18:35:23 2019 +0800

    第二次提交

commit e7f478807d478a0c3e0af8659e0733a9d5b32c8b
Author: 代码无止境 <gancy.programmer@gmail.com>
Date:   Mon Jun 17 18:34:09 2019 +0800

    第一次提交
复制代码

git cherry-pick 相关参数

上面只是git cherry-pick命令的简单用法,其实这个命令还提供了很多的参数。博客

git cherry-pick [<options>] <commit-ish>...

经常使用options:
    --quit                退出当前的chery-pick序列
    --continue            继续当前的chery-pick序列
    --abort               取消当前的chery-pick序列,恢复当前分支
    -n, --no-commit       不自动提交
    -e, --edit            编辑提交信息
复制代码

若是咱们执行git cherry-pick合并以后发生了冲突,这个时候Git会自动帮咱们新建一个分支,以下所示:string

MINGW64 ~/Desktop/p/write/笔记/git-test (master|CHERRY-PICKING)
复制代码

若是咱们想取消此次合并能够执行git cherry-pick --quit或者git cherry-pick --abort命令取消此次挑拣。 两者不一样的地方在于前者会将当前分支中未冲突的内容状态变为modified, 然后者则会直接将当前分支的内容回退到挑拣以前的状态。固然若是咱们也能够解决冲突以后执行以下命令继续合并:

git add *
git cherry-pick --continue
复制代码

后面的-n-e,就比较容易理解了,-n就是挑拣后不会自动提交,须要咱们执行git commit命令进行提交,而-e则是能够改变挑拣的message信息。

相关文章
相关标签/搜索