什么是 git upstream
什么是 git upstream
当你创建了一个github仓库并将该仓库添加为远程仓库git remote add origin https://github.com/githubname/reponame.git
后,你需要使用git push -u origin master
来推送你的第一个提交。
我在(为什么我需要一直使用`--set-upstream`?)中读到了这是一个简化版的命令,等同于以下操作:
git branch --set-upstream-to my_branch origin/my_branch git push
那么什么是upstream,为什么我需要设置它?网络上对此的信息很少。我知道有一个类似的主题(git remote add upstream有什么作用?),但我认为它没有准确解释upstream是什么以及git push -u origin master
的作用,特别是origin master
指向的是本地仓库还是远程仓库?
什么是git的upstream?
在git中,upstream代表你从中克隆分支(一部分)的仓库,也是你向这些分支推送更改(以及可选的全新分支)的地方。GitHub作为upstream,因为他们在集中的位置上为你存储了修订版本。
然而,这种说法不完全准确。Upstream是分支之间的关系,而不是仓库之间的关系。
确切地说,"upstream"是指与--set-upstream
相关的概念,它根本不涉及仓库级别上的关系。不同的本地分支可以将它们的upstream设置为不同的远程分支,甚至可以设置为本地分支。比如,可以设置跟踪你本地master
的功能分支。因此,说"GitHub作为你的upstream"只是误导性的,因为它混淆了开发工作流程中这个术语的意义,以及OP所询问的Git术语中的意义。
解决方法:明确upstream的定义,避免误导性的说法。
原因:混淆了upstream在Git中的意义,给用户带来了困惑。
在命令git push -u origin master
中,-u
标志意味着您的本地分支将成为一个跟踪分支。也就是说,它会跟踪一个远程分支("上游"分支),以便将来的git pull
将知道从哪个分支合并,git push
将被定向到正确的远程分支。
origin
是您要推送到的远程仓库。
master
是refspec参数。refspec参数指定了将哪个本地分支推送到哪个远程分支。它可能很复杂,但在这种情况下,简写形式master
表示将本地的master
分支推送到同名的远程分支origin/master
。
从技术上讲,跟踪操作会向您的.git/config
文件中添加关于master
分支的以下信息:
[branch "master"]
remote = origin
merge = refs/heads/master
并且它在这里创建一个文件.git/refs/remotes/origin/master
,表示远程分支。
请您解释一下命令$git push -u origin master中的origin master指向的是什么,并且我将选择您的答案作为解决方法。
对于分支引用规范(branch-refspec),并不难理解:master
是master:master
的简写,其中第一个"master"定义了本地分支,第二个"master"定义了远程分支 🙂