将非新的本地分支推送到远程

时间:2018-12-11 10:28:08

标签: git

我在其他地方读过,您可以通过以下命令向远程添加 new 本地分支:

git push -u origin branch_name

这里的问题是,我的本地分支不是 new ,因为它具有多个本地提交,但是对于远程服务器来说是新的。如果我使用相同的命令,我的遥控器是否将具有本地分支及其提交历史记录?如果没有,我应该怎么用?

2 个答案:

答案 0 :(得分:0)

如果我猜对了,我认为您有一个新的本地分支,并希望推送到远程分支。如果是这种情况,那么您可以遵循此模式git push <REMOTENAME> <LOCALBRANCHNAME>:<REMOTEBRANCHNAME>,这会将LOCALBRANCHNAME推送到您的REMOTENAME,但将其重命名为REMOTEBRANCHNAME。

答案 1 :(得分:0)

git push的真正作用是调用其他一些Git,并在必要时向其提供提交(和其他任何必需的对象),然后要求其他Git进行设置(可能在创建或删除中)。流程-一些分支和/或标记名称到一些提交哈希ID。

存储库中的内容与该过程几乎无关。您自己的Git施加的唯一实际限制是,它将提供给另一个Git的哈希ID,最后要求它更新其名称的哈希ID必须是您的有效哈希ID资料库。您通常可以通过提供分支或标签的您的名称来生成这些有效的哈希ID,但这不是严格要求的。

作为Nemanja Glumac noted in a comment,您可以将HEAD用作您的名字。如果您当前在自己的分支机构中,则您的Git会找到您的分支机构名称,知道它是一个分支机构,并找到其尖端提交并将其用作提交哈希ID,它将要求另一个Git使用。然后,在要求另一个Git进行任何设置之前,请确保另一个Git具有该提交以及完成该提交历史所需的任何先前的提交。然后,它要求另一个Git将分支名称或标记之一设置为哈希ID。

默认情况下通常是要求另一个Git使用您在一侧使用的相同名称,但是您可以使用push.default设置更改它。所以:

git push origin branch1 branch2:newbranch tag3 a123456:refs/heads/tag4 :del

让您的Git在origin调用另一个Git,如果需要,将所需的所有提交(和其他任何内容)转移到该Git,然后要求其Git执行以下操作:

  • 设置其branch1分支名称以匹配您的名称;
  • 设置其newbranch分支名称以匹配您的branch2分支名称;
  • 设置其tag3标签以匹配您的tag3标签(假设tag3是标签);
  • 设置其tag4标记以指向其哈希ID为a123456...的提交(或其他对象);和
  • 删除他们的名字del(无论是分支还是标签)。

origin之后的每个名称都是一个 refspec ,该名称大致为“两个用冒号分隔的名称”,只是可以省略冒号,而第二个名称则表示“ re-使用名字”。

允许他们出于任何选择拒绝任何或所有这些请求。如果他们 do 拒绝了请求,则可以在一个或多个refspec上使用--force或加号前缀,以更强制的请求重试。他们可能仍然拒绝这些更有力的命令。再次由他们的 Git决定。

不过,默认情况通常是在这些更新时接受礼貌的分支更新请求:

  • 在其末端创建一个 new 分支;
  • 删除末端的一个分支;或
  • 在Git所谓的快进操作中移动其现有分支名称。

在现代Git中,默认情况下拒绝标签更新,但是非常老的接收Git意外在此处应用了分支规则。