Git push:为分支设置目标

m1s*_*hka 29 git

我想用我的当前分支(hp1)

git push
Run Code Online (Sandbox Code Playgroud)

并不是

git push origin hp1:team/hp1
Run Code Online (Sandbox Code Playgroud)

远程分支已经存在.

我当地的分店:

develop
master
* hp1
Run Code Online (Sandbox Code Playgroud)

git远程显示来源告诉我:

Remote branches:
  develop  tracked
  master   tracked
  team/h2  tracked
  team/hp1 tracked
  team/n1  tracked
Local branches configured for 'git pull':
  develop  merges with remote develop
  master   merges with remote master
  hp1 merges with remote team/hp1
Local refs configured for 'git push':
  master   pushes to master   (up to date)
Run Code Online (Sandbox Code Playgroud)

我已经试过了

git branch --set-upstream hp1 origin/team/hp1
Run Code Online (Sandbox Code Playgroud)

git branch --set-upstream hp1 refs/remotes/origin/team/hp1
Run Code Online (Sandbox Code Playgroud)

但两者都不起作用.

我的同事有一个叫做远程分支的本地分支(team/hp1),上面的代码适合他.他最后得到了一个额外的

Local refs configured for 'git push':
  develop  pushes to develop  (up to date)
  master   pushes to master   (up to date)
  team/hp1 pushes to team/hp1 (up to date)
Run Code Online (Sandbox Code Playgroud)

所以也许你可以告诉我什么是错的以及如何解决它.

编辑 我的配置:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = ***@***:***.git
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "hp1"]
    remote = origin
    merge = refs/heads/team/hp1
Run Code Online (Sandbox Code Playgroud)

man*_*lds 44

首先,在第一次推送时,请执行以下操作:

git push -u origin hp1:team/hp1
Run Code Online (Sandbox Code Playgroud)

关于-u选项:

-u
--set-upstream

对于每个最新或成功推送的分支,添加上游(跟踪)引用,由无参数git-pull(1)和其他命令使用.有关更多信息,请参阅git-config(1)中的branch..merge.

从手册中注意到,这本身并不能确定git push下次执行时会发生什么.当您git pull在此分支中执行此操作时,它将从您设置的上游获取它.但是当你推动时,它将推送到匹配的分支(在这种情况下是hp1而不是team/hp1)

为此,您必须将push.default配置值设置为upstream.一旦你设置了它,当你从一个分支(只是做git push)推出时,它将推送到上游,如上所述branch.<name>.merge

所以:

git config push.default upstream
Run Code Online (Sandbox Code Playgroud)

关于push.default:

push.default

如果在命令行上没有给出refspec,在远程中没有配置refspec,并且命令行上给出的任何选项都没有暗示refspec,则定义git push应采取的操作.可能的值是:

没有 - 不要推动任何东西.

匹配 - 推送所有匹配的分支.两端具有相同名称的所有分支都被认为是匹配的.这是默认值.

上游 - 将当前分支推送到其上游分支.

跟踪 - 已弃用的上游同义词.

current - 将当前分支推送到同名分支.