我有一个git项目。遥控器只有一个master
分支,在本地我有一个master
和proj-structure
分支。我使用' git branch -b proj-structure'创建了proj-structure
分支。我目前在当地的proj-structure
分支机构,当我尝试git push
时,git建议我使用git push --set-upstream origin proj-structure
。但我读了一些文章,我应该使用git push --set-upstream master proj-structure
。当我设置上游时,master
和origin
的区别是什么?如果我使用了上面的命令,远程将创建一个名为proj-structure
的精确分支,这个分支将拥有我本地分支所有的提交,对吧?
答案 0 :(得分:0)
你在这里混合了两个不同的git概念。遥控器和分支机构。
[default: origin]
将遥控器视为另一台计算机或其他人。指定origin
之类的内容会告诉git 谁将您当前的更改发送给。
[default: master]
您使用分支来跟踪单独的开发线。例如,您可以使用master
来保留经过测试和稳定的软件版本,并添加更多分支以尝试新事物。
将它们视为制作您随后修改的副本。
每个人都分别保留他们的副本。
当然,如果我们不得不单独研究我们的新发展,那将是无聊的。
这就是为什么我们不仅希望将这些分支保留在我们自己的计算机上,而是将其中一些分享给其他人。
通常你会有一个用于交换的中央服务器(例如github)。此服务器是远程,最有可能名为origin
。使用计算机上分支上的更改推送服务器上的同步分支,同时拉动计算机与服务器上的更改同步。
现在,我在计算机的主分支上做了一个我知道稳定的更改。我可以直接将它推送到我们服务器上的主分支(origin / master)
为什么?因为git已经知道起源是正确的远程来推动此分支上的更改,并且它也知道我的master
分支在该远程上也被称为master
。
现在让我说我做了一个很酷的新实验,为我的软件添加了一只粉红色的兔子。因为我不知道我的老板是否认为这是一个好主意,所以我现在就把它保存在一个单独的版本中。我创建了一个名为pink_rabbit
的新分支。
我不能只输入git push
,因为我们的服务器还没有这个副本。由于分支是新创建的,因此没有信息将其发送给谁。
现在我输入:
git push --set-upstream origin pink_rabbit
这是做什么的:
我告诉git,origin
远程是推送此分支并将更改放在该远程的pink_rabbit
分支上的那个。下一次git已经将这些信息保存在上游分支中,git push
将直接工作。
当然我可以在这里键入master,但后来我会在本地计算机上直接使用服务器上的主副本同步我的实验版本。这种方式首先打破了分支的目的。
让我们说我的公司有一个政策,每个人都必须在服务器的分支上加上他们的名字。
在我的本地机器上,我将主要与自己的分支机构合作。我能做的是:
branch -b pink_rabbit
git push --set-upstream origin tim/pink_rabbit
这样我就可以在pink_rabbit
本地工作,并将其作为tim/pink_rabbit
发布到服务器。
除了一些高级用法之外,您应该始终将您的分支命名为与服务器上命名的分支相同(或至少非常相似)。