如何对比git log筛选出的所有提交差异?查看任务全量代码变更
解决Git任务提交对比与全量变更查看的问题
嘿,我完全懂你这种痛点——每次要查任务相关的提交,得挨个git show太麻烦,合并分支后又没法直接对比分支和origin/master了。下面给你两种场景的具体解决方案:
一、对比Git Log列出的所有目标提交的差异
1. 一次性查看所有目标提交的逐次变更(含中间修改覆盖)
如果想看到每个提交具体改了什么,包括中间的修改和覆盖,不用逐个git show,直接用带--patch参数的git log就能一次性输出:
git log --grep="#1111" --patch
这个命令会先列出所有带#1111的提交日志,紧接着附上每个提交的diff内容,你可以直接滚动查看所有变更细节,还能看到提交间的修改覆盖过程。
2. 对比所有目标提交的整体差异(忽略中间修改,看最终结果)
如果你更关心这些提交最终带来的整体变化,而不是中间的迭代过程,可以先定位到任务的起始和结束提交,再做对比:
# 第一步:获取任务最早的提交哈希 FIRST_COMMIT=$(git log --grep="#1111" --reverse --format="%H" | head -1) # 第二步:获取最早提交的父提交(即任务开始前的代码状态) PARENT_COMMIT=$(git rev-parse ${FIRST_COMMIT}^) # 第三步:获取任务最新的提交哈希 LAST_COMMIT=$(git log --grep="#1111" --format="%H" | head -1) # 第四步:对比起始状态和最终提交的差异 git diff ${PARENT_COMMIT} ${LAST_COMMIT}
这样输出的就是整个任务从开始到完成的最终代码变更,自动忽略了中间的修改覆盖。
二、查看某任务的全量源代码变更
其实上面的第二种方法已经能实现全量变更查看,另外还有两种更便捷的场景:
1. 若任务是通过合并分支提交的
如果这个任务的所有提交都在一个单独的分支上,且已经合并到master,可以直接用三个点的diff语法(对比分支与master的共同祖先到分支最后提交的差异):
# 替换成你的任务分支名 git diff master...feature-task-1111
要是你忘了分支名,也可以找到合并提交的哈希,然后查看合并提交的diff:
# 先找到合并提交(假设提交信息里提到了#1111) MERGE_COMMIT=$(git log --grep="Merge.*#1111" --format="%H" | head -1) # 查看合并提交带来的全量变更 git show ${MERGE_COMMIT}
2. 直接用提交范围对比
如果已经知道任务的起始和结束提交哈希,也可以直接写范围:
git diff <起始提交哈希>^ <结束提交哈希>
这里的^表示起始提交的父节点,确保对比的是任务开始前的状态和完成后的状态。
内容的提问来源于stack exchange,提问作者Eugene Kaurov
相关产品推荐
相关产品推荐

