Git:dev和refs/heads/dev之间有什么区别



从devops最近的工作来看,似乎有"两种方式";以git签出分支:使用简单的分支名称,例如dev,或使用前缀为refs/heads/的分支名称(例如refs/heads/dev(。

两者之间有什么区别

Jenkins的Bitbucket webhook中的某些HTTPPOST内容给出了";CCD_ 4";分支的版本。其它POST内容给出";basename";分支机构
例如,使用(我认为是(Jenkins语法从拉请求Bitbucket事件中获取POST内容,$.pullRequest.fromRef.id==/refs/heads/dev
$.pullRequest.fromRef.displayId==dev

在克隆的存储库中,检出refs/heads/devdev解析为相同的SHAID,但它们各自的stdout不同:

$ git checkout refs/heads/dev
Note: checking out 'refs/heads/dev'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at c320fd1... wip
$ git checkout dev
Switched to branch 'dev'
Your branch is up-to-date with 'origin/dev'.
$ git log --oneline -n 1
c320fd1 wip

前者的stdout看起来与签出SHAID时相同。

根据文档中的规则,名称被早期解析为修订id。

当你给出的ref通过(只(添加一个refs/heads/前缀来解析时,Git的便利机制开始发挥作用,git checkout将使HEAD成为分支提示的别名,因此所有依赖HEAD的便利命令都将引用并更新分支提示ref。

因此,当你说git checkout dev时,你使用的是Git的便利机制,它为你做了方便的事情,它将HEAD连接为对refs/heads/dev的符号引用,git commitHEAD更新将重定向到该分支提示。

但是,如果你通过自己采取明确的步骤来绕过便利逻辑,那就不会发生。这确实是唯一的区别。如果你愿意,你可以

git checkout refs/heads/dev 
git symbolic-ref HEAD refs/heads/dev

现在您已经完成了Git的方便处理。

最新更新