少用少见的 - 只合并指定的内容

  • 作者:KK

  • 发表日期:2020.03.06


问题背景

有时候你只是想将一个 test 分支的部分代码合并到 master 分支,而不是直接git merge test导致全部 test 代码都合并了过来,想必里面有一些你不希望上线的代码吧。

最土的方法,不熟悉的人当然会使用单独复制文件的方式,实际上有专门的操作手法。


解决方案

  1. 你要合并的指定内容,必须是一次独立的提交记录,会产生一个日志号,在原来的分支(比如 test 分支?)通过查看日志得到这个日志号,比如git log从上到下看看,第1个或者最近几个版本号里就有你需要的吧,那就复制版本号,比如版本号是 6b89c00db5f8d24aed5a2c89470f1cc1f6ce2cc8。

  2. 切换到目标分支(比如 master),执行git cherry-pick 6b89c00db5f8d24aed5a2c89470f1cc1f6ce2cc8,好了就这样成功了!

这个 cherry-pick 命令的意思是:摘取一个指定的日志对应的变更内容到本分支,那也就是指定合并某个提交内容的作用了。

其实专业地说,它是把某个提交重做一次,这个重做是包括了文件内容变更、文件提交,所以 cherry-pick 过来后,不需要手动 commit 了,文件内容变了,而 log 也有了这个提交,然后就等你确认并 push 了。


多个日志合并

不是用 cherry-pick 命令,这命令只能合并一个日志,合并多个要执行多次,想一次性合并多个有别的命令,用过一次忘了,找回了补上内容哈。