5

我在 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,我想将本地分支推origin-master送到origin/master

4

3 回答 3

4

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

作为一般建议,我会说在处理多个非裸存储库时更喜欢拉而不是推送:仅推送到裸存储库

于 2012-05-18T08:16:50.300 回答
3

我无法理解您要设置什么样的工作流程,但这有帮助吗?

如何让现有的 git 分支跟踪远程分支?

于 2012-05-19T18:10:22.717 回答
2

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

$ git config push.default upstream
$ git push origin

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

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

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

另请参阅git-push 示例git-config

于 2012-05-22T20:19:59.823 回答