即使被跟踪,Git也试图推送到不同的分支

时间:2013-04-11 03:51:14

标签: git branch repository

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

  • dev的
  • johndev
  • 角路由

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

! [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)

据我所知,它已正确设置,因此我git push angular-routing没有理由试图推送到johndev,但确实如此。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

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

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

git config --global push.default upstream