如何查找Git分支的原生/原始提交记录?
查找源自A分支的原始提交记录
操作前先同步全量远程提交数据,保证本地记录和远程一致:git fetch --all
方法1:补丁对比法(最推荐,准确率最高)
用Git自带的git cherry命令即可,这个命令会按补丁内容而非提交轨迹对比两个分支的差异,自动跳过合并操作带来的关联提交,不会把之前从master合并到A的提交误判为A的原创提交:
执行命令:git cherry -v --no-merges origin/master origin/A
输出规则:
- 行首带
+的提交,就是最初在A分支上创建的原生开发提交 - 行首带
-的提交,是原本属于master、之前合并到A分支的提交,直接过滤即可
如果需要把结果导出保存,直接加grep过滤重定向就行:git cherry -v --no-merges origin/master origin/A | grep '^+' > A-branch-original-commits.txt
方法2:合并节点回溯法(适合需要查看完整合并轨迹的场景)
如果你需要连带合并提交一起查看完整历史,可以按两次合并的节点手动筛选:
- 先定位A分支上第一次把master合并进来的最早合并提交:
git log --merges --reverse --oneline origin/A | head -1
输出结果最前面的哈希值就是目标合并提交,记为<first-merge-master-to-A> - 这个合并提交的第二个父节点,就是当时合并进A的master分支头节点,筛选这个节点之后A分支上的所有提交,就是A的原生提交:
git log --oneline <first-merge-master-to-A>^2..origin/A
如果要排除合并提交只看开发提交,加--no-merges参数即可。
注意:不要直接用
git log A ^master这类简单的提交差集命令,因为A分支存在先合并master、再被合回master的交叉轨迹,这类命令会因为提交拓扑的变化漏算、错算提交,准确率远低于按补丁匹配的git cherry方案。
内容的提问来源于stack exchange,提问作者mahfuj asif
相关产品推荐
相关产品推荐

