在大型团队项目中工作这是我们的工作流程:
// create branch
git checkout -b mybranch
(do work)
// commit to branch locally
git commit -a
// push to remote
git push origin mybranch
(repeat)
完成在我们的分支中工作后,我们将分支合并为master:
// go to master
git checkout master
// update
git pull master
// merge our branch into master
git merge mybranch
(solve conflicts)
git push
现在我们重复上述步骤,工作流程好几天。现在突然间每个人都在获得其他组成员分支和主人的非正向更新。例如某人git在master中拉,然后合并但他们无法推送。它说非快进推。这很奇怪,因为它说主人是完全最新的。
以下是git pull之后,git merge mybranch,git push:
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:foo/project.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 pull表示我们是最新的。
所以问题是,GIT中大型团队的预期工作流程是什么?我们应该如何处理分支机制。
谢谢!
答案 0 :(得分:3)
您以前的工作流程没有问题。
您拉入新更改,将分支合并在一起,然后推出合并后的结果。根据您的选择,您可以使用rebase
代替merge
进行从未公开的更改。
这里的问题很可能是有人在他们的本地副本中重写历史;如果发生这种情况,您将“更新” - 例如,您的工作副本与远程端相同 - 但您将无法推送。
如果您对存储库执行了新的克隆,并从那里执行merge
和push
,则可能会成功。