繁体   English   中英

Git:我有一个80多次提交的功能分支。如何在不破坏历史的情况下将其安全地合并到开发/生产中?

[英]Git: I've a feature branch with 80+ commits. How can I safely merge it into develop/production without ruining the history?

我已经在一个功能部门工作了几个星期,并且有大约80个提交的历史,涉及我们项目的许多部分的工作。 对于小功能,我只需要重新定义,将提交压缩成一个简洁的提交,合并它以进行开发,然后推送它。 但在这里,我已经积累了很长的历史,承诺涉及许多不同的部分。

我想将它们拆分成较小的提交,即“功能F的完成部分A”“完成部分B”等等,但是工作不是线性的,并且每个部分都是同时建立的。

我可以将它们全部压缩成一个提交并推送它,但是我会失去所有的历史记录,它可能会使调试在未来变得很痛苦,因为它是如此大的变化。

我不熟悉在专业环境中使用git,所以我不确定最佳实践。 你对这种情况有什么看法?

一般的方法是

  1. 拆分混合功能提交
  2. 重新排序提交

我假设您的存储库看起来像这样

o--------o----------o----------o
A        B          C          D

并且您的功能更改是混合和分发的

- feature 1 changes are in A,B,C
- feature 2 changes are in A,C,D
- feature 3 changes are in B,C,D

拆分提交

如果要对每个要素进行更改,必须首先拆分提交。

$ git rebase -i HEAD~3

这将打开一个编辑器

pick A ...
pick B ...
pick C ...
pick D ...

由于您需要编辑每个提交更改它

edit A ...
edit B ...
edit C ...
edit D ...

保存并退出编辑器,git将开始rebase。 Git会重新定义A并暂停让你进行编辑。 现在,您可以重置提交A并进行新提交,以反映每个功能更改。

$ git reset HEAD~
$ git add ... # only files of feature A
$ git commit -m 'Feature A'
$ git add ... # only files of feature B
$ git commit -m 'Feature B'
$ git add ... # only files of feature C
$ git commit -m 'Feature B'
$ git rebase --continue

Git继续,您必须一次又一次地重复上述示例,直到所有提交被拆分为止。 您的存储库看起来不像

o---o---o---o---o---o---o---o---o
E   F   G   H   I   J   K   L   M

另请参见将先前的提交分解为多个提交

重新排序提交

目前,您只需在一次提交中对一个功能进行所有更改。 但它们不是一个线性顺序:

  • 特征1的变化在E,G,I中
  • 特征2的变化在F,J,L中
  • 特征3的变化是H,K,M

现在你可以做另一个rebase -i并重新排序提交。

pick E
pick G
pick I
pick F
pick J
pick L
pick H
pick K
pick M

保存并退出rebase交互式编辑器,git将重新排序提交。 您可能会遇到必须解决的合并冲突。 提交将被重新排序,因此它们可能与现在的早期提交冲突。

希望git rebase完成没有任何冲突,你最终会得到这个存储库

 o---o---o---o---o---o---o---o---o
 N   O   P   Q   R   S   T   U   V

|         | |         | |         |
+---------+ +---------+ +---------+
 feature 1   feature 2   feature 3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM