在分支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。