Git 推送 HEAD -> master 尽管 set-upstream-to 和 push.default

Git pushes HEAD -> master despite set-upstream-to and push.default

我有一个 git 存储库,使用了几年没有问题。为了方便做大多数事情,我使用 SmartGit。

我最近注意到,在从 dev 分支从 SmartGit 进行推送时,它显示的用于确认的对话框显示 "Push current branch 'dev' to 'master'" 而不是像以前那样从 dev 到 dev。

我切换到 git cmd 行来比较行为,发现它也想推送到 master:

$ git push --dry-run
To https://github.com/some_repo.git
   c00bb9e..6a8ade4  HEAD -> master

使用 refspec 推送按预期工作,但我似乎无法找到一种方法告诉 SmartGit 使用该 refspec 或者它如何决定它将推送 dev -> master。

$ git push origin dev --dry-run
To https://github.com/some_repo.git
   428dd9b..6a8ade4  dev -> dev

Git 状态和参考按预期显示:

$git status
On branch dev
Your branch is ahead of 'origin/dev' by 1 commit.
  (use "git push" to publish your local commits)
nothing to commit, working directory clean

$ git symbolic-ref HEAD
refs/heads/dev

我的配置 push.default 设置为 'simple' 这应该意味着当前将推送到远程上的相同名称并在不匹配时抱怨。

git config push.default
simple

我还重置了 'upstream-to' 并且仍然是一个普通的 git 推送最终想要执行 HEAD -> master。

$git branch --set-upstream-to origin/dev
Branch dev set up to track remote branch dev from origin by rebasing.

我不知道这可能是什么原因以及如何回到简单的 git 推送到与当前匹配的分支 and/or 如何获得 SmartGit 停止提供推送电流 -> master。

Git版本:2.5.0

智能Git版本:8.0.3#8135

来自 git-push(1):

When the command line does not specify what to push with <refspec>... arguments or --all, --mirror, --tags options, the command finds the default <refspec> by consulting remote.*.push configuration, and if it is not found, honors push.default configuration to decide what to push (See git-config(1) for the meaning of push.default).

听起来您已将 remote.dev.push 设置为 HEAD