批量cherry-pick

589 阅读1分钟

在vscode下的插件对批量操作的支持不是太好,所以我研究了一下如何让原生的git命令效率更进一步(非常羡慕webstorm的)

在bash中,$( )可以将括号内命令的执行结果,作为变量替换在当前执行的语句,

而git的很多命令都可以通过输入多个hash来进行批量操作(如cherry-pick、revert)

把这两者结合起来,然后在用git log和相应的过滤条件,就可以随心所欲的进行cherry-pick操作

示例

如果要将把feature_2022分支的commit 按某种commit信息合并到 develop上:


git cherry-pick $(git log feature_2022 --reverse --grep="commit信息" --pretty=format:"%H")

切换到develop分支

  • --reverse:将log的输出结果倒置,因为cherry-pick应该从早的commit开始,revert正好相反,需要注意
  • --grep="commit信息":搜索commit信息中的的内容,如果是用jira,就可以按工单合并,使用的场合很多
  • --pretty=format:"%H":输出commit的完整hash,将输出格式化为这样的形式才可以cherry-pick

可以先执行git log feature_2022 --reverse --grep="commit星系" --pretty=format:"%H | %s | %cr" 查看顺序是否正确

遇到冲突可以用vscode的mergeEditor解决

遇到已经cherry-pick过的commit可以用git cherry-pick --skip跳过

也可以将cherry-pick换成revert 但是得把--reverse, revert的顺序得相反

把feature_2022分支的commit 按author合并到 develop上:


git cherry-pick $(git log feature_202208 --reverse --author="user1" --pretty=format:"%H")

此命令可以在使用-n限制合并的条数 如 下面的命令表示将user1 的最近10次commit进行cherry-pick


git cherry-pick $(git log feature_202208 --reverse --author="user1" --pretty=format:"%H" -10)

git log的用法还有很多,这里只是抛砖引玉一下,欢迎来交流新的git操作🎇