Git推送:为分支设置目标

Git推送:为分支设置目标,git,Git,我想推动我目前的分支(hp1)与 而不是 git push origin hp1:team/hp1 远程分支已存在 我在当地的分支机构: develop master * hp1 git remote show origin告诉我: Remote branches: develop tracked master tracked team/h2 tracked team/hp1 tracked team/n1 tracked Local branches conf

我想推动我目前的分支(hp1)与

而不是

git push origin hp1:team/hp1
远程分支已存在

我在当地的分支机构:

develop
master
* hp1
git remote show origin告诉我:

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)
我已经试过了

git branch --set-upstream hp1 origin/team/hp1

但两者都不起作用

我的同事有一个称为远程分支(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)
所以也许你可以告诉我哪里出了问题,以及如何解决

编辑 我的配置:

[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

使用
-u
选项来
git push

$ git push -u origin hp1:team/hp1
然后,在此之后,您可以执行以下操作:

$ git push

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

git push -u origin hp1:team/hp1
关于-u选项:

-u
--逆流而上

对于每个最新或成功推送的分支,添加 上游(跟踪)引用,由无参数git pull(1)和 其他命令。有关详细信息,请参见分支..合并到 git配置(1)

请注意,从手册中可以看出,这本身并不能决定下次执行git push时会发生什么。当您在这个分支中执行git pull时,它将从您设置的上游获取它。但当您推送时,它将推送到匹配的分支(在本例中是hp1而不是team/hp1)

为此,必须将
push.default
config值设置为
上游
。一旦你设置了这个参数,当你从一个分支推送时(只需执行
git push
),它就会像
branch..merge

我们也要这样做:

git config push.default upstream
关于push.default:

push.default

定义git push在服务器上未提供refspec时应采取的操作 命令行中,远程中未配置任何参照规范,也未配置任何参照规范 由命令行中给定的任何选项暗示。可能的 价值观是:

没有-不要推任何东西

匹配-推送所有匹配的分支。所有具有相同分支的分支 两端的名称被认为是匹配的。这是默认设置

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

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

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

(2012年3月):小心:“上游”政策可能很快成为默认政策
(在git1.7.10+之后的某个时间)

见“

在当前设置中(即
push.default=matching
),不带参数的
git push
将推送本地和远程存在的同名分支
当开发人员推送到自己的公共存储库时,这通常是合适的,但如果使用共享存储库不危险的话,这可能会造成混乱

建议将默认值更改为“
上游”,即仅推送当前分支,并将其推送至git pull将从中提取的分支。
另一个候选者是“
current
”;这将仅将当前分支推送到同名的远程分支

到目前为止所讨论的内容可以在本主题中看到:

先前的相关讨论包括:

若要加入讨论,请将您的邮件发送至:git@vger.kernel.org


以下内容将允许用户不必为第一次
git推送指定
-u${branch\u name}

git config "branch.${branch_name}.remote" origin
git config "branch.${branch_name}.merge" "refs/heads/${branch_name}"

诚然,它需要更多的输入,但当它位于设置工作区的脚本中时就不需要了。它也不会过早地将分支推送到远程回购。

对我来说,它只是更改了
git pull
的配置,
git push
的配置仍然是相同的(没有为分支hp1设置推目标)你能发布配置文件吗?thx,很好的解释!另外,我现在明白了为什么它在没有设置push.default的情况下为我的同事工作了。push.default的另一个值很简单-类似于上游,但如果上游分支的名称与本地分支的名称不同,则拒绝推送。git 2.0将更改git推送的默认行为,但仅更改为“简单”我认为它不会满足你的要求。看@AlexanderBird是的,你是对的。我已经记录了自:。
git config push.default upstream
git config "branch.${branch_name}.remote" origin
git config "branch.${branch_name}.merge" "refs/heads/${branch_name}"