有人可以解释我(或引导我一个很好的参考)以下问题吗?
我知道下面是我必须使用的正确推送命令:
git push origin refs/heads/master:refs/heads/master
(I also know that it has short forms, like:
git push origin master:master
or
git push origin master)
但是,有一段时间,我在推动之后做了2次(错误地):
(1) git push origin refs/heads/master:refs/remotes/heads/master
(2) git push origin refs/heads/master:refs/remotes/origin/master
git报告两个命令都没有错误,虽然在(1)中,我没有远程名称“head”。
我的第一个问题是:在这些情况下git如何推送到远程存储库?它们会损害我的远程存储库吗?
第二个问题是:根据http://progit.org/book/ch9-3.html,“refs / remotes”下的所有内容都是远程引用 这是要知道最后一次服务器通信时相应远程分支上的最后一个提交ID。它只是为了那个 (例如,仅供参考),是否有任何git命令使用这些引用?
更新我对该命令的发现(2)
我通过以下方式再次仔细验证了命令(2)的行为:
我发现当前的差异(由命令(2)影响的那个)
我注意到命令(2)的输出是
Counting objects: 842, done.
Compressing objects: 100% (337/337), done.
Writing objects: 100% (651/651), 336.30 KiB, done.
Total 651 (delta 243), reused 612 (delta 218)
To file:///data/resto/central-repo
* [new branch] master -> origin/master
现在我做了另一个测试:
在其他本地仓库中
推送 git push origin master:master
我收到了来自git的错误消息:"...! [rejected] master -> master (non-fast-forward)..."
这就是我所期待的
然后我用命令(2)推了一下,结果就是我上面提到的那个。
所以显然(2)与git push origin master不同。
“refs”文件夹in the remote
存储库的含义是什么?命令(2)创建一个新的“refs”
远程存储器,它指的是什么?
答案 0 :(得分:1)
(2)推送与git push origin master
非常相似。但不确定(1)。
如“Are there different meanings to the concept of 'tracking' in git?”中所述,refs/remotes
名称空间用于跟踪分支:即表示“远程存储库中最后一次远程跟踪分支的分支状态”更新”。
这些引用是git fetch
的用法,以便了解要提取的提交(与您在回购中已有的提交相比)
请参阅SO撰稿人git: fetch and merge, don’t pull撰写的博文“Mark Longair”了解更多信息。