25

我与一个使用 git 进行源代码管理的小团队合作。最近,我们一直在做主题分支来跟踪功能,然后在本地将它们合并到 master 中,然后将它们推送到远程服务器上的中央 git 存储库。这在 master 中没有进行任何更改时效果很好:我创建了我的主题分支,提交它,将它合并到 master,然后推送。万岁。

但是,如果有人在我之前推送到原点,我的提交不会快进。因此,随之而来的是合并提交。当主题分支需要在本地与 master 合并以确保我的更改与现在的代码一起工作时,也会发生这种情况。因此,我们最终得到了无处不在的合并提交和一个与友谊手镯相媲美的 git log。

因此,变基是显而易见的选择。我想要的是:

  • 创建包含多个提交的主题分支
  • 结帐大师和拉(快进,因为我还没有承诺掌握)
  • 将主题分支重新定位到新的主人头上
  • 针对 master 重新设置主题(因此主题从 master 头开始),将 master 带到我的主题头

我目前的做法如下:

git checkout master
git rebase master topic_1
git rebase topic_1 topic_2
git checkout master
git rebase topic_2
git branch -d topic_1 topic_2

有没有更快的方法来做到这一点?

4

4 回答 4

45

你知道git pull --rebase吗?当您拉动时,它会变基而不是合并,并防止合并提交污染您的历史记录。

branch.<name>.rebase您还可以使用和branch.autosetuprebaseconfig 选项将其设置为分支的默认行为。

于 2010-12-17T20:28:34.217 回答
12

我发现,随着时间的推移,我最喜欢的解决方案是:

git checkout topic
# make [n] commits
git rebase -i HEAD~[n] #clean up time
git checkout master
git pull --rebase
git checkout topic
git rebase master
git checkout master
git merge topic
git push origin
于 2010-12-18T05:57:42.040 回答
3

对于我们的团队,我们设置了一些效果很好并且根本不使用 rebase 的东西。

我们削减了在 Jira 票证上的工作,这不需要太长时间,通常需要 1-2 天的时间。每个开发人员为每个工单创建一个分支并在此分支上工作。当准备好共享时,它被推送到中央服务器。

中央服务器由 hudson CI 服务器监控,该服务器提取更改、合并所有更新的分支、重建软件、运行测试并将所有内容推送到中央主 git 存储库。

从那里我们将其拉回我们的存储库。我们会定期(即每隔几天)将我们的工作分支与中央主控合并,以保持它们“关闭”。

由于没有人在“合并”机器上工作,除了 CI 服务器之外没有人接触主服务器,我们很少遇到合并问题(大约 1-2% 的提交)。通过清理工作区,这些问题可以在构建服务器上快速解决。我们发现我们可以通过保持分支较短并在推送之前与远程主节点合并来避免大多数这些问题。

我也喜欢合并比变基更强大,并且需要更少的返工。

于 2010-05-26T23:25:32.930 回答
2

您也可以仅针对最新的 master 进行 rebase

git checkout topic_1
git rebase refs/remotes/origin/master

这消除了拉动的需要(至少在您的功能分支的 EOL 之前)。我们的流程使用 GitHub 拉取请求,因此我无需在本地执行此操作。

于 2013-11-11T14:38:59.760 回答