git push与git push origin <branchname>的区别

66
我对Git还不是很熟悉。我正在创建一个分支,然后想要将其推送到“origin”。我认为只需在我的分支上发出“git push”命令就足够了。通过指定push.default为simple可以实现吗?

3
当然,你应该能够直接使用git push命令而不必加上"git push -u origin master"。"-u"参数是为了设置上游分支,你应该至少执行一次"git push -u origin <分支名>"以设置上游分支,之后你就可以像这样直接执行"git push"命令了。 - Brij Raj Singh - MSFT
1
请查看此链接 https://dev59.com/mnNA5IYBdhLWcg3wdtv5?rq=1,如果需要设置push.default。 - Brij Raj Singh - MSFT
3个回答

60

第一次推送应该是:

git push -u origin branchname

这样可以确保:

使用这个默认策略,在将来的git push中,只会推送当前分支,而且仅当该分支具有与之同名的上游分支时才会推送。
这避免了推送所有匹配分支(先前的默认策略),其中许多测试分支被推送,即使它们还没有准备好在上游存储库上可见。


我理解得对吗,我应该做两件事:1)在第一次推送分支时发出“git push -u origin branchname”命令;2)设置push.default为simple? - dhblah
1
实际上,我认为git会自动将当前本地分支与通过git push origin branchname创建的远程分支链接起来。这样做是合理的。我的意思是,需要明确指定我要推送到origin的本地分支应该与我要推送的本地分支相连,这有点奇怪。 - dhblah
3
git push origin branchname 无法链接本地分支和远程上游分支。您需要使用 -u 明确建立这个链接。再次提醒:https://dev59.com/X2Qn5IYBdhLWcg3wGT8X#17096880 - VonC

33

首先,您需要在本地创建您的分支

git checkout -b your_branch

之后,您可以在自己的分支中本地工作,当您准备分享该分支时,请进行推送。下一个命令将该分支推送到远程存储库 origin 并跟踪它。

git push -u origin your_branch

你的队友/同事可以通过提交并显式地推送来向你的分支进行推送

... work ...
git commit
... work ...
git commit
git push origin HEAD:refs/heads/your_branch 

1
命令git pullgit push用于在本地和远程存储库之间移动提交。但是,在底层,本地分支与远程分支完全不同/分离。在pushpull中发生的是两者之间的合并,如果可能,则采用快速转发条件。
通常,我们试图保持本地和远程的同步,因此,在本地和远程为分支赋相同的名称是很正常的,但这不是必需的。您可以通过feature_A的本地分支来表示any_other_name的远程分支而没有任何问题。
因此,如果将它们放在一起,我们有不同的分支不被名称所约束,这使得您可以将任何远程分支与任何本地分支pullpush合并)。这就是为什么仅使用git push不能正常工作的原因。因为您可以将其推送到远程现有分支中的任何一个,并且git不知道您的意思。

但是我们明显更经常使用 pullpush 来在本地和远程之间同步。因此,当您第一次推送新的本地分支,并打算创建一个相应名称的远程分支时,您必须使用命令中的 set-upstream 选项来将它们绑定在一起。之后,简单的 git push 就可以完成同步工作,但仍然有可能将其 push合并)到另一个远程分支,但在这种情况下,您应该使用完整的命令。

注意:如果您的 git 配置了多个远程,请注意使用 git push 可能会产生的副作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接