2011-12-29 48 views
2

有问题我这里有几个人的工作就可以了git仓库。 我已经设置了branch.master.rebase = truebranch.master.mergeoptions = --no-ff,但我遇到了一个问题:混帐:试图保持一个干净的历史树

有人试图将一个功能分支合并到master中。合并是成功的,git说该分支在原产地/主人之前有30次提交。当他试图推动这些变化时,git拒绝了推送,因为那里的遥控器发生了变化,所以他不得不拉扯。当他做了拉,git为合并到主人的承诺进行了rebase,现在只有29次提交给主人。

我相信这次合并提交丢了,因为之后的底垫中,从功能分支来的地方重新申请新的提交的提交,而不是提交。

推后,树是这样的:

* c3'(head, master, origin/master) 
* c2' 
* c1' 
| * c3 (feature_branch, origin/feature_branch) 
| * c2 
| * c1 
|/
* 

这就是我想实现:

* c4 (head, master, feature_branch, origin/master) 
| \ 
| * c3 (origin/feature_branch) 
| * c2 
| * c1 
|/
* 

合并看起来像一个快进合并,有什么我”试图避免,保持分支历史。

上我能做些什么来避免这种情况的任何提示?

感谢,

编辑: 本文descibes我的问题: http://notes.envato.com/developers/rebasing-merge-commits-in-git/

现在我知道的--preserve-合并为git rebase选项,但有没有办法让这个选项默认?

否则,开发人员将不得不git fetchgit rebase origin/master而不是只有git pull

+1

尝试此链接:http://www.randyfay.com/node/89帮助我最多。 – 2011-12-29 13:09:23

+0

幸运的是,这里的开发人员不知道'git push --force' .. 但是我不确定这篇文章会有什么帮助,请您解释一下更多? 我们将feature_branches推送到远程,因为每个工作在被合并到master之前都会被检查,所以我们不能在合并之前重新分支分支(在第一次推送分支之前,指示devs从master转移)。 – 2011-12-29 13:40:21

+0

就我个人而言,我喜欢“合并工作流的替代方案”中提到的拉取请求策略。您可以使用http://code.google.com/p/gerrit/进行此审核流程。负责与主分支合并的一个人应该是限制性的,并且如果他们不可合并,则拒绝这些请求。 – 2011-12-29 13:58:12

回答

3

为什么,如果你想保存所有分支的历史,你用branch.master.rebase =真的吗?

+0

我不知道我会失去与'--rebase'的合并提交。 – 2011-12-29 14:00:52

+0

“如果上游分支已经包含您所做的更改(例如,因为您邮寄了上游应用的补丁),则该提交将被跳过。”合并提交表示之前提交中已包含的更改。所以它会被跳过。 – 2011-12-29 14:11:02

+0

我也设置了该选项以避免合并分支,我只想保留特征分支插入历史记录。 – 2011-12-29 16:27:21

3

保持历史的清洁是过分强调了很多次。 DAG(有向无环图)的本质允许对特定提交(sha1s,tags,branches,tree-ish等)的引用进行简单的设置操作,以查看已经合并了哪些提交或哪些提交仍然需要。不重新印刷以更准确的方式保留了历史,显示了并行开发和合并时的历史。

要添加,您可以通过使用分支每个功能得到公平的举办无论如何,如果你可以让你的五官细小。这是我们使用的工作流程:

https://plus.google.com/109096274754593704906/posts/R4qkeyRadLR

起初,我喜欢让我的历史漂亮,整洁和线性。当我越来越多地使用Git时,很明显这是使用像SVN这样的非DVCS工具的结果。

+0

我们创建分支功能。通过保持历史清洁,我的意思是避免合并分支,所以提交树很容易理解。 – 2011-12-30 15:17:57

+0

取决于您是在讨论功能内的合并还是合并以集成该功能。 – 2011-12-30 19:21:30