2013-05-02 124 views
12

我看了一下When do you use git rebase instead of git merge? 但我想确定在这种情况下选择哪种解决方案: 我想在Master上实现一个新功能,所以我将它分支到一个新的特色分支。 我在功能上做了10次提交,而其他人在主设备上进行了其他提交。Git - 合并vs rebase

我的问题是,如果为了测试目的,如果我想让Master与Master分开,但我需要使用集成的新主Master提交进行测试。 因此,我应该将主人合并到功能中(而不是将功能合并到主人中,在我测试之前将主人的修改应用到主人身上)还是进行重做?

+0

这就是辩论。我会做一个rebase。 – 1615903 2013-05-02 10:45:19

+0

您查看的链接中的最佳答案提供了一个明确的建议,以便在您的用例中进行重定位。 – mah 2013-05-02 10:47:55

+0

未来,请使用更多描述性标题,以更清楚地解释您尝试解决的问题。 – 2014-07-31 19:09:33

回答

5

为什么不创建一个新分支来测试合并版本?例如:

git checkout -b test-merged-feature master 
git merge my-feature 
[... do your testing ..] 

没有什么特别的理由,在这里做一个重订,但如果你还没有推你的特性分支,我不会有事的为好。这些问题部分是关于你希望你的历史看起来如何 - 有些人不喜欢看到很多合并;有些人更喜欢将其作为跟踪对特定功能作出贡献的方式。

+0

我想有一个“开发”分支来测试功能,然后把它放在主人的生产将是一个很好的做法,在这种情况下?所以合并VS rebase问题只是关于你想要提交历史的方式? – user2316341 2013-05-02 11:30:32

+0

我同意这个选项(合并在一个新的分支),所以+1。但我仍然在下面的答案中主张进行重新分配。 – VonC 2013-05-02 11:31:11

+0

@ user2316341如果您必须整合(合并)几个Feature分支以查看它们是否一起工作,那么“dev”分支是有意义的。但是,如果您一次只有一个功能分支...它增加了一点收益的复杂性。 – VonC 2013-05-02 11:34:14

5

除非你已经被推您的分支(你知道其他人克隆你的回购协议),我还是会做一个变基,我在自己的“git rebase vs git merge”答复中提到。

测试与否,我通常会在每次更新本地回购(git fetch)时进行重新绑定,以确保最终合并(Featuremaster)将是一个快速向前的合并。

因此,这不仅仅是关于您的历史外观,而是主要确保您开发的内容不是基于旧版本的master,并且随着时间的推移继续与master中的最新变化。

+0

所以你说我应该总是在大部分时间做rebase,但是如果我已经推动了我的分支,那就不行了。这是为什么 ?已经推动分支的问题是什么? – user2316341 2013-05-02 11:54:03

+0

@ user2316341 rebase重写SHA1的历史记录。在这种情况下,你必须'git push --force'来替换已经由rebase生成的新历史记录推送的历史记录。如果没有人使用你的分支,这不是什么大问题,并且rebase是迄今为止最简单和最安全的解决方案,而不是人工合并中间分支。 – VonC 2013-05-02 11:56:35

+0

@ user2316341请参阅http://stackoverflow.com/a/8940299/6309作为问题的示例。 – VonC 2013-05-02 11:57:32

5

在工作流程我熟悉,有一个主干,并集成分支(S),并设有分支机构

我一直对“衍生”分支rebaseing。 (通过派生分支,我指的是从干线开始的方向),并且合并到整合分支。

我喜欢这种感觉,我总是在一个分支中工作,这个分支与我将要整合的分支具有相同的历史。我喜欢合并成为快进,所以,我知道我刚刚合并的内容与我刚刚在分支中测试的内容完全相同。

0

当2个开发人员提交相同的回购(这会产生冲突)时,您可以通过创建合并提交来合并2个提交,或者您可以在其他提交之上重新提交1个提交(您的)。最好重新绑定而不是生成合并提交。