了解git:connect branch到远程存储库

时间:2012-05-15 19:22:24

标签: git

我在github上有一个存储库,比如testrepo。现在我想设置一个本地存储库repo,它有一个分支origin-master,我希望能够从存储库中编辑内容。

repo/origin-master  <-------->  origin/master

克隆工作正常:

mkdir repo && cd repo && git init 
# not necessary of course:
echo "master" > master && git add master && git ci -m "master"
git remote add origin git@github.com:<username>/testrepo.git
git fetch origin
git branch --set-upstream origin-master origin/master 
git checkout origin-master
# create a new file:
echo "for origin-master" > orig-master && git add orig-master && git ci -m "orig-master"

git push origin 
To git@github.com:<username>/testrepo.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:<username>/testrepo.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

如何告诉git如果我想推送到原点,我想将本地分支origin-master推送到origin/master

3 个答案:

答案 0 :(得分:4)

请参阅this post,了解推送非裸(即工作副本)回购的好建议。基本上这里发生的是当你按这种方式推动时,远程仓库不会更新它的工作副本(真实文件),只更新它的历史记录。然后,您需要git reset --hard来刷新文件,但这很危险,因为您将丢失未提交的修改。

作为一般性建议,我会说在处理多个非裸存储库时更倾向于推送:push to only bare repositories

答案 1 :(得分:3)

我在了解您尝试设置的工作流程时遇到问题,但这有用吗?

How do you make an existing git branch track a remote branch?

答案 2 :(得分:2)

将默认推送行为设置为上游:

$ git config push.default upstream
$ git push origin

git push origingit push origin :相同,默认情况下会推送所有“匹配”分支。您的origin-master分支不匹配,因此它尝试使用 匹配的分支(master)并将其推送到原点。

或者,您可以基于每个远程指定push refspec:

$ git config --add remote.origin.push origin-master:master
$ git push origin

另请参阅git-push examplesgit-config