refs/heads/master:refs/heads/master 是什么意思?

What does refs/heads/master:refs/heads/master mean?

通常,我通过命令行使用 Git。今天,我决定将它与生成以下命令的 NetBeans IDE 一起使用:

git push ssh://...myrepo.git/ refs/heads/master:refs/heads/master

谁能解释一下 refs/heads/master:refs/heads/master 是什么意思?

您将本地名为 'master' 的分支推送到远程仓库,该分支也称为 'master'。

通常情况下,您的分支会有一个上游,在这种情况下,这种语法是不必要的。

使用的syntax如下:git push <repository> <src-ref>:<dst-ref>

通过使用 refs/heads/master 作为 <src-ref><dst-ref>,Git 与 限定和明确的 refspecs(本地和远程)并且不需要根据源和目标猜测命名空间 refspecs。此外,存储库是明确提供的,这意味着它不是由配置的名称寻址(如 origin)。


让我们在演示存储库中实际操作一下。分支 dev 已签出,远程已在克隆后删除。首先,我们列出(明确提供的)远程存储库中的引用,并看到所有引用都指向 7b7d5a3git-push 的日志显示我们在远程 master 分支上更新 7b7d5a3..4a27218 而没有配置远程并且站在 dev 分支。再次列出遥控器上的引用证实了这一点。

$ git branch -va
* dev    7b7d5a3 Initial commit
  master 4a27218 Add file.txt

$ git ls-remote git@domain.tld:user/repo.git
7b7d5a33d6e6ea3d69d9f87fa8ef1c596a37e24c    HEAD
7b7d5a33d6e6ea3d69d9f87fa8ef1c596a37e24c    refs/heads/dev
7b7d5a33d6e6ea3d69d9f87fa8ef1c596a37e24c    refs/heads/master

$ git push -v git@domain.tld:user/repo.git refs/heads/master:refs/heads/master
Pushing to git@domain.tld:user/repo.git
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 294 bytes | 294.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To domain.tld:user/repo.git
   7b7d5a3..4a27218  master -> master

$ git ls-remote git@domain.tld:user/repo.git 
4a272186f7f56f2346fb2df7e63584f09936bdad    HEAD
7b7d5a33d6e6ea3d69d9f87fa8ef1c596a37e24c    refs/heads/dev
4a272186f7f56f2346fb2df7e63584f09936bdad    refs/heads/master