Git如何逐提交rebase分支并自动获取目标分支下一个提交SHA-1
自动获取下一个待变基提交SHA的实现方法
直接用Git自带的rev-list命令就能实现提交查找自动化,不用手动翻提交日志:
核心查找命令
git rev-list --reverse --ancestry-path feature/rebase-target..feature/A | head -n 1
参数逻辑很明确:
feature/rebase-target..feature/A会圈定提交范围,筛选出所有存在于feature/A分支、但不在feature/rebase-target当前提交历史里的提交,也就是你还没完成对齐的所有feature/A提交- 加
--ancestry-path是为了只保留两个提交之间直接祖先链上的提交,不会把分叉、合并带进来的无关提交算入结果,输出序列刚好是feature/A上待对齐的线性提交列表 - 默认
git rev-list会从最新的HEAD往旧提交方向排序,加--reverse参数会反转输出顺序,从离当前feature/rebase-target最近的最老提交开始输出 - 最后
head -n 1取输出结果的第一行,就是你要找的、往feature/A HEAD方向推进一个位置的目标提交SHA
如果执行命令后没有任何输出,说明
feature/rebase-target已经追到feature/A的HEAD位置,所有迭代变基的推进工作已经完成
工作流简化方案
你不用手动复制命令输出的SHA,可以直接把命令嵌套到原有操作步骤里,把原来第一步推进rebase-target的命令替换成:
git checkout feature/rebase-target && git rebase $(git rev-list --reverse --ancestry-path feature/rebase-target..feature/A | head -n 1)
后续切到feature/B执行变基、解决冲突的步骤和你原有流程完全一致。
如果要进一步简化操作,可以配置一个Git全局别名,避免每次敲长命令:
git config --global alias.advance-rebase-target '!git checkout feature/rebase-target && git rebase $(git rev-list --reverse --ancestry-path feature/rebase-target..feature/A | head -n 1)'
配置完成后,每次需要把rebase-target往前推一个提交时,直接执行git advance-rebase-target即可,完全不需要手动查找提交SHA。
内容的提问来源于stack exchange,提问作者SpaceTrucker
相关产品推荐
相关产品推荐

