Git冲突场景下如何简单可靠获取theirs提交哈希值?
获取冲突场景下Git的ours/theirs提交哈希值
当Git工作区处于合并、变基、拣选提交、回退甚至stash pop等冲突状态时,我们可以通过git checkout --ours/--theirs path/file或git show :n:path/file(其中n为1、2、3)获取单个文件的ours/theirs/base版本,但如果需要拿到这些版本对应的提交哈希(SHA),可以参考以下方法:
获取ours的提交哈希
直接执行以下命令即可,无论哪种冲突场景,HEAD始终指向当前工作区所属的基础提交:
git rev-parse HEAD
获取theirs的提交哈希
不同冲突场景对应不同的Git伪引用,你可以通过以下方式统一检测并获取:
通用命令
执行这条命令会依次检查所有可能的冲突伪引用,返回当前场景对应的theirs提交哈希:
git rev-parse --verify MERGE_HEAD 2>/dev/null || git rev-parse --verify REBASE_HEAD 2>/dev/null || git rev-parse --verify CHERRY_PICK_HEAD 2>/dev/null || git rev-parse --verify REVERT_HEAD 2>/dev/null || git rev-parse --verify stash@{0} 2>/dev/null
各场景对应伪引用说明
- 合并(merge)冲突:
MERGE_HEAD指向你要合并进来的分支顶端提交 - 变基(rebase)冲突:
REBASE_HEAD指向当前正在应用的目标提交(即触发冲突的theirs版本) - 拣选提交(cherry-pick)冲突:
CHERRY_PICK_HEAD指向你正在拣选的目标提交 - 回退(revert)冲突:
REVERT_HEAD指向你试图回退的目标提交 stash pop/apply冲突:此时stash未被清除,stash@{0}对应当前冲突的stash对象(stash本质是一个特殊的提交)
这些伪引用仅在Git处于冲突状态时存在,冲突解决完成后会被自动删除。
内容的提问来源于stack exchange,提问作者xmedeko
相关产品推荐
相关产品推荐

