git push - git脑袋乱了



在分支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配置:

[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:

这个问题似乎已经解决了,但据我所知,我没有做任何事情来"修复"它。不过,如果有人想澄清是否有什么问题,或者为什么这可能是一个问题,请让我知道。非常感谢。

你使用的是哪个版本的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中,默认的是"简单"语义,它把:

  • 只将当前分支转到同名分支,且只当前分支被设置为与该远程集成时分支,如果你推送到与你取回的相同的远程;或者

  • 只将当前分支切换到同名分支

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

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

相关内容

  • 没有找到相关文章

最新更新