【问题标题】:Git push trying to push to different branch even though tracked即使被跟踪,Git push 也试图推送到不同的分支
【发布时间】:2013-04-11 03:51:14
【问题描述】:

我有一个带有 4 个分支的 git repo 设置:

  • 主人
  • 开发
  • 约翰德夫
  • 角度路由

我目前正在处理angular-routing 并尝试使用简单的git push 推送到origin/angular-routing,但我注意到我收到了以下错误:

! [rejected] johndev -> johndev (non-fast-forward)

我明白错误的含义,这很好,但我不明白为什么它一开始就试图推到那里。我将所有分支跟踪到似乎设置正确的相同远程分支。运行git remote show origin 给了我以下信息:

Remote branches:
  angular-routing tracked
  dev             tracked
  johndev         tracked
  master          tracked
Local branches configured for 'git pull':
  angular-routing merges with remote angular-routing
  dev             merges with remote dev
  johndev         merges with remote johndev
  master          merges with remote master
Local refs configured for 'git push':
  angular-routing pushes to angular-routing (up to date)
  dev             pushes to dev             (up to date)
  johndev         pushes to johndev         (local out of date)
  master          pushes to master          (up to date)

据我所知,它设置正确,所以我在angular-routing 上的git push 没有理由尝试推送到johndev,但确实如此。

我在这里做错了什么?

【问题讨论】:

    标签: git branch repository


    【解决方案1】:

    这是因为push.default 的设置是matching,这是默认设置。这意味着当您在没有指定要推送的内容的情况下进行推送时,git 将尝试推送目标上已经存在的所有分支。

    听起来您想将该设置更改为upstream,这将导致默认情况下仅将当前分支推送到配置为其上游分支的远程分支。这可以通过以下方式完成:

    git config --global push.default upstream
    

    【讨论】:

    • 请注意,无参数推送的出厂默认设置将在 git 2.0 中更改——“匹配”是 push.default 的一个很好的设置,我喜欢它,但这并不容易- 预期的。
    • 您也可以使用git push origin HEAD,它比git push origin some-long-branch-name:some-long-branch-name 更明确但打字更不烦人
    • 啊,太好了,谢谢!那真的让我很烦。输入git push 就更好了。谢谢大家:)
    猜你喜欢
    • 2018-02-12
    • 1970-01-01
    • 2020-09-26
    • 2014-02-04
    • 2014-03-23
    • 2011-02-24
    • 2019-03-08
    • 2012-10-07
    • 2016-02-22
    相关资源
    最近更新 更多