为何在cmd.exe中HEAD与HEAD^显示相同的提交ID?
为何在cmd.exe中HEAD与HEAD^显示相同的提交ID?
嗨,我来帮你捋清楚这个问题的根源!
你遇到的情况其实是Windows cmd.exe的特殊字符处理在搞鬼:在cmd里,^是一个转义字符,当你输入git rev-parse HEAD^时,cmd会自动把这个^去掉,实际传给Git的参数其实是HEAD——这就难怪两个命令返回的提交ID完全一样了!
正常来说(比如在Git Bash、PowerShell或者Linux/macOS的终端里),HEAD^的意义是当前HEAD提交的第一个父提交。尤其是你提到最近的提交是合并提交,合并提交本身有多个父提交,HEAD^默认指向的是你合并目标分支的那个父提交(简单说就是你合并到的分支之前的最新提交)。
给你几个解决办法,随便选一个都能拿到正确的结果:
- 把
^改成两个,也就是执行git rev-parse HEAD^^,这样cmd会把其中一个^转义成实际的^传给Git; - 把
HEAD^用双引号括起来,执行git rev-parse "HEAD^",这样cmd就不会处理里面的^了; - 换成Git Bash或者PowerShell来运行命令,这些环境不会把
^当作转义字符,直接输入HEAD^就能得到正确的父提交ID。
备注:内容来源于stack exchange,提问作者Ajay Sakalabhaktula
相关产品推荐
相关产品推荐

