git cherry-pick从问题分支里分离正常commit

背景

有时候,我们的分支合并了别人的有问题代码的分支,为了不被问题代码影响进度,需要给自己没有问题的代码重新拉一个分支

操作

找到自己这个分支最早的提交日期,用git log命令找到这个日期之后所有的自己的提交,剔除所有合并提交(Merge Commit),并且逆序保存到文件里。

git log --since={first_commit_date} --reverse --author={your_name} --no-merges --pretty=%H {your_branch} > commits.txt

从master拉一个新分支,用git cherry-pick把commit全部合并到新分支上

git cherry-pick `cat commits.txt`

异常QA

The previous cherry-pick is now empty, possibly due to conflict resolution.

说明当前的commit遗漏了前置的commit,没有这个commit后续的都合并不了,需要排查下是否遗漏了别人的或者这个日期之前的commit。也可能是你在合并提交里手动修改了代码,这个合并提交也需要合并进来,这时候会报下面的错误

error: commit {id} is a merge but no -m option was given.

说明git log找到的commit里有合并提交,cherry-pick不知道合并合并哪个的,需要指定选项-m,要哪个分支的代码参数就是几

你可能感兴趣的:(git)