无法将某些引用推送到远程存储库

时间:2014-07-07 06:05:53

标签: git

我在局域网中创建了一个新的远程存储库,并添加了项目(PROJECT 1PROJECT 2)。

USER A和USER B一次克隆存储库,USER A在PROJECT 1中进行了更改并推送了这些更改。

用户B在PROJECT 2中进行了更改,他没有对PROJECT 1进行任何更改,在推送数据的同时他也只选择了PROJECT 2内容,但它给出了错误在推动时。

ERROR :

error: failed to push some refs to http://gitbub.com
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first merge the remote changes (e.g.,
hint: 'git pull') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.`

如何允许推送用户2?

1 个答案:

答案 0 :(得分:2)

jcm所述,最简单的解决方案是将project1和2放在他们自己的回购中。

但如果他们在同一个回购中,那么:

用户2仍然需要在更新的仓库之上重新设计他/她的工作。

git pull --rebase

与单独git pull相比,这允许您在更新的远程跟踪分支上重放本地提交。

x--x--x--x--y--y--y (master): y means Project2 commits
         |
  (origin/master)

git pull --rebase = git fetch + git rebase

git fetch表示:

x--x--x--x'--x' (origin/master)
       \
        y--y--y

git rebase表示:

x--x--x--x'--x'--y'--y'--y' (master)
             |
      (origin/master)

现在git push将是一个微不足道的,在原始主人的基础上添加你的本地提交。

由于User2的工作与User1的工作是分开的,因此rebase将在origin / master之上重复User2的提交,并允许(fast-forward)推送。

由于两个项目都在同一个仓库中,如果在同一个分支上修改它们,就会出现这种情况。

一个好的解决方法是创建两个分支,每个项目一个。

如果您需要两个项目,那么在推送之前需要pull --rebase 您可以考虑making the rebase automatic on a git pull


单独多个git pull会引入这里不需要的合并提交(因为修改是在两组不同的文件上完成的)

x--x--x--x'----x' (origin/master)
       \        \
        y--y--y--m (master)

然后下一次拉:

x--x--x--x'----x'--x'---x' (origin/master)
       \        \        \
        y--y--y--m--y--y--m (master