我在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
?
答案 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 origin
与git push origin :
相同,默认情况下会推送所有“匹配”分支。您的origin-master分支不匹配,因此它尝试使用 匹配的分支(master
)并将其推送到原点。
或者,您可以基于每个远程指定push
refspec:
$ git config --add remote.origin.push origin-master:master
$ git push origin