当多个开发人员在同一个分支上工作时,建议使用git rebase吗?

时间:2014-06-24 12:56:01

标签: git version-control

https://git-scm.com/book/en/v2/Git-Branching-Rebasing#_rebase_peril

建议在存储库公开时不要进行重新定位。

最近在git merge vs rebasing

中的帖子

建议不要在开发人员之间共享的分支上完成rebase。

我理解,因为开发人员可能首先合并代码,然后他决定重新设置代码,其他开发人员最终可能会创建多个重复提交,如重新定位的Perils中所述。

如果所有开发人员达成一项共识协议,即每个人都会总是将代码重新绑定而不是合并,那该怎么办?该建议是否仍适用?

P.S

所有这些答案让我感到困惑。我想我会再次重新提出这个问题。

我们假设有两个开发人员在两台不同的计算机上工作。有一个中央存储库。两位开发人员克隆并开始工作。

开发者1:

  • 从本地/主人创建了一个分支。我们说local / iss123。
  • 将其推送到远程

开发者2:

  • 从远程
  • 拉出更改
  • 结帐到local / iss123
  • 在local / iss123
  • 做了一些提交
  • 将更改推送到remote / iss123

开发者1:

  • 有一些本地提交
  • 他想用origin / iss123
  • 来修改分支
  • git rebase origin / iss123
  • 然后他将他的提交推送到origin / iss123

开发者2:

  • 有一些本地提交
  • 他将使用origin / iss123
  • 来修改分支
  • git rebase origin / iss123

等等。始终是开发人员1& 2将使用origin / branch重新绑定其分支,然后将其更改推送到origin / branch

功能稳定后,最后

开发者1:

  • 结帐到本地/主人
  • 从origin / master
  • 中提取最新代码
  • 检查来自其他开发者的本地/主人是否有任何提交
  • 将结帐到local / iss123
  • 如果有任何新提交,
  • 将使用local / master重新定位local / iss123。
  • 如果有一个rebase,则将分支local / iss123推送到remote / iss123。
  • 然后结帐到本地/主人
  • 将local / iss123合并到local / master
  • 然后将local / master推送到origin / master

开发者2:

  • 现在将分别从origin / master和origin / iss123的最新更改提取到local / master和local / iss123

稍后循环再次继续。

这是对的吗?当两个开发人员在同一个分支上工作并且总是希望改变而不是合并时,这是正确的方法吗?

2 个答案:

答案 0 :(得分:1)

让我们假设没有人进行交互式变基,改变历史,而只是做git fetch然后git rebase origin/branch。在那种情况下,你可以做一个推动,如果没有其他人推动他们最近的rebase,否则你会得到冲突,并且还要再次变基。重要的是,每个人都在努力进行变基,从不做push -f,因为这会给下游的每个人带来麻烦。

这个问题,是你想要这样做的原因。如果目标只是避免合并提交,那么最好使用这样的工作流程:

  1. 分支公共分支
  2. 你工作吗
  3. 将您的个人分支重新针对公共分支(如果其他人提交了某些内容
  4. 将您的分支推向公共分支
  5. 如果由于冲突导致推送失败,请转到步骤3
  6. 从下一个工作项开始,
  7. 这样每个人总是将他们的工作作为线性提交提交到公共分支之上。

    注意:保留原始回复,但根据更新的问题添加更多信息。

    基本上,我的建议是,local/iss123工作的开发人员在通过git pull来回转换时,会继续合并彼此的更改。一旦iss123稳定,其中一个开发人员就会将其重新命名为master,即

    git checkout iss123
    git checkout -b rebase_iss123
    git rebase -i master
    // select first as edit (so you can change its commit message)
    // and select the rest as fixup
    git checkout master
    git merge rebase_iss123
    

    这将占用所有iss123并将其压缩到master的尾部的单个提交中。

    现在,开发人员可以分支该主人的新问题工作。

答案 1 :(得分:0)

将代码推送到公共存储库后,不会对提交进行任何更改。但是当你在本地存储库上重新定位时,就会发现推送。 例: 我在功能分支上进行了更改。然后我从我的功能分支的父分支拉,通常开发分支。然后,我可以在开发时修改我的功能分支。然后我可以将我的开发分支推到原点。

因此,如果所有的开发人员都在他们的本地回购上进行变基,然后重新推出,那么就可以了。

重点是,一旦在公共回购中共享提交或分支,没有人可以更改做一个rebase或修改评论等。