是否可以总是git pull --rebase master branch

时间:2013-10-03 08:09:37

标签: git

我们是一个使用git的团队,我们有一个中央存储库(单一来源),我们用来pushpull来自(和capistrano使用它来部署分支主机)

我们定期进行提交和部署(每天10到20次部署),这意味着我们有很多合并提交,git blame成为噩梦

我已经读过,为了获得更简单的历史记录,我们可以使用git pull --rebase来避免这种情况。总是在主分支上做这个是个好主意吗?

如果是,我想建议在配置中使用:

git config branch.master.rebase true

这有什么问题吗?

4 个答案:

答案 0 :(得分:25)

完全没问题。 事实上,这是首选。

99%的时间最好改变这些变化。 如果没有,开发人员可以随时中止rebase并手动合并他们的更改。

替代方案(合并拉动)导致大量的小方提交和合并,这些提交没有任何意义。

总的来说,我并不经常看到合并局部变化的重点。 这意味着开发人员开始的确切修订有一些特殊之处,并且以某种方式重新定位到不同的版本会导致信息丢失(可能是“我在Bob的功能之前开始这个,我希望在没有它的情况下进行通信”和Bob一起玩得很好,我被指责为“或某事......”。 实际情况并非如此,干净的直线提交历史记录要容易理解。

答案 1 :(得分:3)

默认情况下进行拉动变换是可以的(不一定是“好主意”,也不一定是“坏主意”)。你只需要记住它实际上会改变你的工作。如果您已经做了一系列提交,这些提交都取决于在 Bob改变它 1 之前repo 中的内容,那么您的rebase(除了Bob的更改之外)可能会强迫您修复所有这些提交,当它可能更容易修复最后的合并提交时。

我更喜欢手动执行此操作:运行git fetch,然后git rebasegit merge,具体取决于我完成提取后可以发现的情况。

git pull --rebase(和/或设置branch.master.rebase true)有一个优势,因为“带有rebase的拉动”非常智能,并且可以处理遥控器也进行了rebase的一些情况。


1 “鲍勃”在这里代表任何做出某些改变(并击败你到push步骤)导致你自己的改变“消化不良”的人,就像它一样。 / p>

答案 2 :(得分:2)

我的expierence总是很好的pull.rebase。如果您不希望出现合并冲突,则可以在本地分支中工作,如果您想使用最新代码,则在推送当前工作之前,您总是希望进行任何未经修改的更改。

作为git pull的结果在分支中合并几乎总是没有意义,如果合并将是有意义的分支应该是不同的(并且合并显式)。

另见http://stevenharman.net/git-pull-with-automatic-rebase

答案 3 :(得分:-4)

你永远不应该重新定义其他存储库中存在的任何修订版本,并且可能还有其他基于它的工作,因为这项工作也需要重新设置。

如果您推动分支然后重新绑定它,则必须使用-f选项进行下一次推送。因此,如果您从未使用过该选项,那么您永远不会陷入有问题的情况并且可以自由地进行自我修改。但是,如果您使用-f推送,或许推送到功能分支,那么当其他人也可能在该分支上工作或与其协调变基时,请注意不要重新定义。

因此,对于您自己的开发工作,无论如何,rebase(和rebase -i以及组合和拆分更改等使其更合乎逻辑)。但是,如果不止一个人在某个功能上工作,那么重新定位需要协调,这可能不再值得,并且已发布的开发分支基本上是不受限制的。