我在其他地方读过,您可以通过以下命令向远程添加 new 本地分支:
git push -u origin branch_name
这里的问题是,我的本地分支不是 new ,因为它具有多个本地提交,但是对于远程服务器来说是新的。如果我使用相同的命令,我的遥控器是否将具有本地分支及其提交历史记录?如果没有,我应该怎么用?
答案 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决定。
不过,默认情况通常是在这些更新时接受礼貌的分支更新请求:
在现代Git中,默认情况下拒绝标签更新,但是非常老的接收Git意外在此处应用了分支规则。