如何在Git历史中查找使用git merge -s ours完成的合并提交?
找出所有使用
-s ours 的Git合并提交 嘿,这个坑我之前也踩过!别担心,咱们可以通过Git的提交差异分析来精准定位这些有问题的合并提交,完全符合你一开始的思路。
核心思路
当你用 -s ours 合并时,最终的合并提交内容完全继承自你当前的本地分支(第一个父提交),被合并的分支(第二个父提交)的所有更改都会被丢弃。所以我们只要找出所有和第一个父提交内容完全一致的合并提交,就能锁定目标。
具体命令实现
直接运行下面的脚本,它会自动遍历所有合并提交并筛选出可疑的提交:
git log --merges --pretty="%H" | while read commit_hash; do # 检查合并提交是否和第一个父提交完全无差异 if git diff --quiet "$commit_hash^1" "$commit_hash"; then echo "⚠️ 疑似使用 -s ours 的合并提交:$commit_hash" # 可选:显示该提交的详细信息,方便确认 git log --oneline -1 "$commit_hash" fi done
额外验证步骤
如果你想进一步确认某个提交确实是用了 -s ours,可以对比它和第二个父提交的差异:
git diff <合并提交哈希>^2 <合并提交哈希>
如果输出的内容是第二个父提交的所有更改都被“反向”应用了(相当于把被合并分支的修改全部撤销),那就能100%确定这是 -s ours 的合并。
后续恢复建议
找到这些提交后,你可以用 git cherry-pick <第二个父提交哈希> 把之前丢失的工作重新应用到当前分支;如果需要撤销这个错误的合并,记得用 git revert -m 1 <合并提交哈希>(-m 1 指定以第一个父提交为基准撤销)。
内容的提问来源于stack exchange,提问作者Craig J
相关产品推荐
相关产品推荐

