将主分支和开发分支进行变基操作

3

我有一个稳定且在线的 Web 应用程序。几周前,我决定开始开发一个新功能,并创建了一个开发分支。自那时以来,我已经完成了这个开发,并希望使这个功能上线。

我阅读了有关 git rebase 的资料,虽然我理解重置分支的概念,但我不确定如何应用它,即最佳实践方面。我创建了第二个“虚拟”的本地仓库以尝试一些东西。我的想法是,一旦开发完成并且稳定,这就应该成为您的新“稳定”(主)分支。因此我尝试了以下命令:

  • git rebase development master: 最终这个命令起作用了,但是在合并过程中产生了一些冲突,所以很让人恼火。不过,这意味着 master 分支拥有所有新的开发功能。
  • git rebase master development: 这个命令速度比较快,因为没有需要解决的冲突,但所有的开发功能仍留在 development 分支上,这不能反映在我的 "稳定" master 分支上。
在这两种情况下,一旦rebase完成,我会收到通知,我的本地分支与远程分支不同,并要求使用git pull将远程分支合并到我的本地分支中(也许是另一个问题)。
由于我对VCS还不熟悉,所以我真的不确定哪种方法是最佳实践?有人能提供一些建议吗?我想拥有一个主稳定分支(master),并具备新功能。大多数人是否将development rebase到master上并且放弃(以归档方式)“旧”的master分支?还是应该始终将master rebase到development上以保持“稳定”分支的进展,并在未来需要时创建新的开发分支?
另一个问题是rebase后出现分歧的分支。这会在git pull时产生问题,因为有太多分歧的提交(请参见下面的图像)。
你有什么想法?最好的方法是什么?

Diverging commits after rebasing development onto master

Diverging commits after rebasing master onto development

1个回答

1
git rebase master development: 如果没有冲突需要解决,这将会更快,但是所有的开发特性都将保留在开发分支上,并且在我的“稳定”主分支上不会反映出来。
是的:你需要将 development(在 rebase 后)合并到 master 中,才能使 master 反映出 development。
rebase 的目标(作为第一步)是确保经过 rebase 的 development 分支仍然可以在最新的 master 上工作,并在本地解决任何可能的冲突。
然后从 dev 合并到 master 是一个微不足道的操作,因为所有的 dev 提交已经在 master 的顶部了。
请注意,任何 rebase 都需要使用 git push --force 命令发布经过 rebase 的分支的新历史记录。如果只有你在该分支上工作,那么这不是什么大问题。

谢谢。这非常有帮助。关于最佳实践,一旦您合并重置dev分支,然后将dev合并到master分支,是否有一个标准的保留旧dev分支的时间?此外,对于git push --force,我想您是指在这种情况下使用dev分支? - Zeta-Squared
@Zeta-Squared,您可以继续使用dev分支(在合并到master后):新的提交将存储在该“新”的(重复使用的)dev分支上。 - VonC
@Zeta-Squared 还有一个有用的选项,即 gitworkflow(一词):在 https://dev59.com/73IOtIcB2Jgan1znFihY#71583967 中提到,并在 https://dev59.com/YXVC5IYBdhLWcg3wrDNd#216228 中详细说明。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接