如何在不使用--set-upstream的情况下将一个新分支推送到远程服务器?(涉及IT技术)

11

场景是我在远程服务器上没有任何仓库,只有一个帐户。然后,我在本地运行以下命令,其中x是用户名,y是仅存在于我的本地系统中的项目名称。

git init  
git remote add buckety https://x@bitbucket.org/x/y.git  
git add .  
git commit --message "Here we go..."  
git push buckety

现在出现了一个错误,要求我设置远程上游。我可以使用 --set-upstream 或者 -u 进行设置,但是根据我的谷歌搜索,这已经被弃用了。(实际上在控制台中建议仍然提到了它,有点奇怪。)
我想以正确的方式进行操作,已经搜索了--track--set-upstream-to,但是就我所见,没有针对我特定情境的示例,在尝试的操作中出现了错误。
如何在不使用弃用选项的情况下创建远程分支呢?我可能需要在远程上创建跟踪分支,以便:
  1. 本地分支 A 对应于远程分支 A,但还要
  2. 本地分支 A 对应于远程分支 B。
最好在推送之前进行配置,但我不确定如何操作。我不能使用 checkout,因为该分支尚不存在。由于同样的原因,我也不能使用 set-upstream-to
4个回答

11
正确的命令是:
git push -u origin master

或者,对于更近期(2021年及以后)的存储库:
git push -u origin main

然后下一个git push将是一个简单的:git push
参见“为什么我需要显式推送一个新分支?”。 自Git 1.8以来--set-upstream被称为--set-upstream-to您可以提前设置一个远程跟踪分支,方法如下:
git branch -u origin/master master
# or
git branch -u origin/main main

(然后你的第一个git push就会变成一个简单的git push

所以,*-u* 在之前是 --set-upstream 的简写,现在变成了 --set-upstream-to 的缩写?或者我应该理解为,在初始推送时不会弃用(因此可以使用),但在后续工作中会弃用(因此不应再使用)?在初始推送时,*--set-upstream* 和 --set-upstream-to 有什么区别?没有区别,对吗? - Konrad Viltersten
@KonradViltersten,-u 仍然有效,现在确实是 --set-upstream-to 的缩写。--set-upstream 已经被弃用。 - VonC
太棒了。但是我是一个喜欢啰嗦的人,所以我碰巧在后缀中使用了*--set-upstream*。在服务器上修订这些文件后,我没有看到任何区别。如果我不那么无知于细微差别,是否可以告诉我应该注意什么? - Konrad Viltersten
@KonradViltersten 这是一个本地设置,用于让您的本地存储库知道在哪里推送(请阅读https://dev59.com/X2Qn5IYBdhLWcg3wGT8X#17096880)。当执行`branch -vv master`时,您可以看到它。 - VonC
神了!我想给你+1,但我已经因为太兴奋而给你了。 :) - Konrad Viltersten
@KonradViltersten:--set-upstream--set-upstream-to之间的主要区别在于附加参数的处理。运行git branch newbr --set-upstream br2创建一个名为newbr的分支,并将其上游设置为br2;运行git branch oldbr --set-upstream-to br2将现有分支oldbr的上游设置为br2。当您创建新分支并使用--set-upstream时,细节会变得更加微妙。 - torek

2

对于我来说,将现有的本地分支推送到服务器上尚不存在的分支是:

git push --set-upstream origin LocalBranchThatDoesntExistOnServer

0
作为对VonC的回答的补充,如果你发现它正在推送到错误的远程分支,例如在将master分支重命名为main之后,请尝试以下操作:
git push -u origin main:main

0

这就是我如何在不添加远程的情况下推送到Gerrit实例的方法

git push http://localhost:8080/scm *:*
fatal: remote error: Git repository not found

但是项目必须已经存在


哦,我开始看到问题了。我必须通过在服务器上执行“git init”来创建repo。然后,我就可以做剩下的事情了。当然,BitBucket不会让我访问命令行,但我可以从GUI创建repo。我更喜欢从TUIs做事情。总觉得GUI会让我变得懒惰和愚蠢...而且,使用文本界面工作会让你看起来很酷,就像80年代电影《战争游戏》中的那个孩子一样。 - Konrad Viltersten
@KonradViltersten,你无法在服务器端执行git init命令,因为服务器是BitBucket(bitbucket.org)。你必须先在那里创建一个空的repo(使用BitBucket Web GUI)。 - VonC
我建议你跟随这个教程: - Filip Stefanov
https://confluence.atlassian.com/bitbucket/create-a-git-repository-759857290.html - Filip Stefanov

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