我在局域网中创建了一个新的远程存储库,并添加了项目(PROJECT 1
,PROJECT 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?
答案 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