2012-02-25 130 views
2

在一大群项目这个工作是我们的工作流程:GIT科工作流程

// create branch 
git checkout -b mybranch 
(do work) 
// commit to branch locally 
git commit -a 
// push to remote 
git push origin mybranch 
(repeat) 

当我们的分支工作完成,我们合并分支到主:

// go to master 
git checkout master  
// update 
git pull master 
// merge our branch into master 
git merge mybranch 
(solve conflicts) 
git push 

现在我们只重复上述步骤,几天的工作流程就可以完成。现在,突然间,每个人都获得了其他组成员分支和主人的非更新。例如,有人将git拉到主人内部,然后合并,但他们无法推送。它说非快速推进。这很奇怪,因为它说主人是完全保持最新的。

下立即混帐拉后,混帐合并mybranch,混帐推:

! [rejected]  master -> master (non-fast-forward) 
    error: failed to push some refs to '[email protected]: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内的一个大集团的预期工作流程是什么?我们应该如何处理分支机制。

谢谢!

回答

3

以前的工作流程没有问题。

您拉入新的更改,将您的分支合并在一起,然后推出合并的结果。根据您的选择,您可以使用rebase而不是merge进行从未公开的更改。

这里的问题很可能是某人在其本地副本中重写了历史记录;如果发生这种情况,您将会“最新” - 如您的工作副本与远程端相同 - 但您将无法推送。

如果您执行存储库的全新克隆,并从那里执行mergepush,它可能会成功。

+0

为什么重新克隆什么时候可以用git checkout master; git reset --hard origin/master? – chazomaticus 2012-02-25 02:31:31

+0

@chazomaticus我不知道他们的本地存储库做了什么。就我们所知,“起源”意味着两件不同的事情。新的开始是干净而明确的。 – Borealid 2012-02-25 04:54:26

+1

Borealid可能是正确的历史因为例如rebase重写。我只想补充一点,我会将我的分支机构保留在本地,而不是将它们推送到原产地,因为原产地将被大量不必要的'mybranch'垃圾邮件发送,除非mybranch必须与其他人共享,并保留在本地。 – ralphtheninja 2012-02-25 12:32:12