Git头搞砸了?

时间:2015-05-18 16:40:33

标签: git git-push git-remote

在分支dev下,当我运行

git status

我得到了

On branch dev
Your branch is up-to-date with 'hub/dev'.

nothing to commit, working directory clean

当我跑步时

git remote show hub

我得到了

* remote hub   
  Fetch URL: ssh://user@user.com/home/user/private/repos/user_hub.git
  Push  URL: ssh://user@user.com/home/user/private/repos/user_hub.git   

  HEAD branch: master   
  Remote branches:
            dev        tracked
            master     tracked
            userModule tracked
  Local branches configured for 'git pull':
            dev    merges with remote dev
            master merges with remote master
  Local refs configured for 'git push':
            dev        pushes to dev        (up to date)
            master     pushes to master     (up to date)
            userModule pushes to userModule (up to date)

我没想到得到HEAD branch: master。怎么了?

问题/问题

dev下,当我运行git push时,它会推送到hub/master,而应该推送到hub/dev。我该如何解决这个问题,以便当我们在分支dev时,它会推送到hub/dev

更新

根据一些评论,上面的配置似乎是正确的。

请参阅下面的post-update挂钩;问题可能是由它造成的吗?

#!/bin/sh

echo
echo "**** Pulling changes... [Hub's post-update hook]"
echo

case " $1 " in
*'refs/heads/dev'*)
cd /home/user/www/dev/ || exit
        unset GIT_DIR
        git pull hub dev
        echo
        echo "Dev was pulled"
        echo
        ;;
esac

case " $1 " in
*'refs/heads/master'*)
        cd /home/user/www/www/ || exit
        unset GIT_DIR
        git fetch hub && git reset --hard hub/master
        echo
        echo "Master was reset to reflect bare changes. PRAY THE LORD!"
        echo
        ;;
esac

exec git-update-server-info

这是 git config

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = true
[remote "hub"]
        url = ssh://user@user.com/home/user/private/repos/user_hub.git
        fetch = +refs/heads/*:refs/remotes/hub/*
[branch "master"]
        remote = hub
        merge = refs/heads/master
[branch "dev"]
        remote = hub
        merge = refs/heads/dev
[merge]
        renameLimit = 999999

更新2: 这个问题似乎已经解决了,但就我所知,我没有采取任何措施来“修复”它。 :s尽管如此,如果有人想澄清是否有问题,或者为什么这可能是个问题,请告诉我。非常感谢你。

1 个答案:

答案 0 :(得分:2)

你使用的是什么版本的git?
在git v2.0之前git push将推送所有您的分支机构,而不提供源/分支名称!!!

阅读发行说明的第一段: https://git.kernel.org/cgit/git/git.git/tree/Documentation/RelNotes/2.0.0.txt

  

当" git push [$ there]"不说什么推,我们用过了   传统"匹配"到目前为止的语义(你的所有分支都被发送了   只要已经存在同名分支,就可以到远程控制台   在那边)。在Git 2.0中,默认值是" simple"语义,   推动:

     
      
  • 只有当前分支到同名的分支,并且只有   当前分支设置为与该远程集成时   分支,如果你正在推送到同一个遥控器;或

  •   
  • 只有当前分支到具有相同名称的分支,如果您   正在推送到一个不是你常去的地方的遥控器。

  •   
     

您可以使用配置变量" push.default"改变   这个。如果你是一个想要继续使用的老人   "匹配"语义,您可以将变量设置为"匹配",for   例。阅读文档以了解其他可能性。

正如您在问题中所描述的那样 - 您的开发状态是干净的但是当您按下它时会推动掌握。听起来你在master中有一些未推送的提交,所以git push也只是推送了master。