Git中如何验证Release分支的所有Bug修复已同步至master分支?
嘿,这个问题我之前帮团队解决过好几次,确实当bug修复量上来时,手动核对cherry-pick很容易漏,给你几个实用的方法来验证:
方法1:用git cherry直接对比分支提交
这个命令专门用来找出某分支上有但目标分支没有的提交。在本地仓库里运行:
git cherry master release
输出里的+号开头的条目,就是release分支上存在但master还没有的提交。如果这条命令没有任何输出,说明所有release上的修复都已经同步到master了;如果有输出,每个+后面的提交哈希就是你还没cherry-pick过去的bug修复提交,可以逐个核对。
方法2:列出release独有的提交列表
用git log直接拉出release分支上所有不在master的提交,命令是:
git log --oneline master..release
这个会以简洁的一行格式展示所有未同步的提交,你可以直接看提交信息,确认这些是不是还没cherry-pick的bug修复。如果没有输出,就说明同步完成了。
方法3:用临时分支做rebase测试(安全无风险)
这个方法更直观,通过本地临时分支的rebase来验证:
# 先切到master分支并拉取最新代码 git checkout master git pull # 创建一个临时测试分支 git checkout -b temp-release-sync-check # 把release分支的提交rebase到这个临时分支上 git rebase release
如果rebase过程直接完成,没有任何需要处理的提交或冲突,说明master已经包含了release的所有修复;如果rebase过程中应用了新的提交,这些就是还没同步的修复,之后你只需要删掉这个临时分支就行(git checkout master && git branch -D temp-release-sync-check),不会影响任何正式分支。
方法4:对比分支代码差异
如果前面的命令还不够直观,你可以直接对比两个分支的代码差异:
git diff master release
如果差异内容全是master上新增的功能代码,没有release分支上的bug修复改动,说明所有修复都同步了。不过这个方法适合master新功能不多的情况,否则可能需要仔细筛选差异内容。
额外小建议
你可以把这些命令做成简单的shell脚本,定期运行来自动检查;另外,每次cherry-pick完成后,可以给对应的提交打个标签(比如git tag -a cherry-picked-xxxx),方便后续快速核对哪些提交已经同步。
内容的提问来源于stack exchange,提问作者MikaelHalen

