Git

Git如何只合并部分提交

Git的cherry-pick命令

Posted by mengxun on November 28, 2018

前言

如果现在有两个分支,pre-productionmaster,然后master分支有add apifix issue两次新的提交,但是我不想用merge把master这两次commit都并到pre-production上,只想要fix issue这一个提交,那么就可以用cherry-pick这个命令。

-----*                     pre-production
      \
       *-------------*     master
     fix issue    add api

使用

  • 首先,找到master分支上的fix issue这次提交的id号,在我这里是1a2a36850909cdc9269e784d8114516b530dc705
$ git log
commit c99783780d8b131d0368b2126c3f26b069d594e8 (HEAD -> master)
Author: 孟勋 <mengxun1122@163.com>
Date:   Wed Nov 28 10:54:57 2018 +0800

    add api

commit 1a2a36850909cdc9269e784d8114516b530dc705
Author: 孟勋 <mengxun1122@163.com>
Date:   Wed Nov 28 10:54:10 2018 +0800

    fix issue
    
commit 866667f01f0ab814a0e0384e09e6724661e2fc3c (pre-production)
Author: mengxun <mengxun1122@163.com>
Date:   Wed Nov 28 10:02:11 2018 +0800

    add test
  • 然后回到pre-production分支上去,使用git cherry-pick + id 命令
$ git cherry-pick 1a2a36850909cdc9269e784d8114516b530dc705
[pre-production 10d4120] fix issue
 Date: Wed Nov 28 10:54:10 2018 +0800
 1 file changed, 1 insertion(+)
  • 如果顺利的话,此时log里应该就有fix issue这次提交了,但是id号会和master不一样。如果有冲突,就像merge一样解决冲突然后提交就行。
$ git log
commit 10d4120b06ea5f1d10b9c1b269100600e098f6dd (HEAD -> pre-production)
Author: 孟勋 <mengxun1122@163.com>
Date:   Wed Nov 28 10:54:10 2018 +0800

    fix issue
        fix issue
-----*----*                pre-production
      \
       *-------------*     master
     fix issue    add api