仅使用Git工具,如何列出曾存在于某分支但现已不在该分支上的提交?
列出曾属于某分支但当前已不在该分支的提交
要找出曾经属于某个分支、但现在已经不在该分支上的提交,我们可以利用Git的**引用日志(reflog)**结合comm工具来实现——reflog会记录分支的所有历史变动(包括被重置或删除的提交),而comm可以帮我们对比两个提交列表的差异。
可用命令
直接运行这条命令即可:
comm -23 <(git reflog @{0} --pretty='%h' | sort -u) <(git log @{0} --pretty='%h' | sort -u)
命令拆解
git reflog @{0} --pretty='%h':获取当前分支的所有引用日志记录,仅输出提交的短哈希值git log @{0} --pretty='%h':获取当前分支现有提交的短哈希值sort -u:对两个列表去重并排序,确保comm能正确进行对比comm -23:只保留第一个列表有、但第二个列表没有的内容——也就是曾经出现在分支上、现在已被移除的提交哈希
测试步骤
你可以通过以下步骤验证这个命令的效果:
- 在目标分支上创建若干提交(比如多次执行
git commit -m "test commit x") - 执行硬重置,将分支恢复到更早的状态:
git reset --hard <初始提交哈希或分支起点> - 此时运行上面的
comm命令,就能看到那些被重置掉、曾属于该分支的提交哈希了
内容的提问来源于stack exchange,提问作者caduceus
相关产品推荐
相关产品推荐

