[英]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,所以我不确定最佳实践。 你对这种情况有什么看法?
一般的方法是
我假设您的存储库看起来像这样
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
另请参见将先前的提交分解为多个提交
重新排序提交
目前,您只需在一次提交中对一个功能进行所有更改。 但它们不是一个线性顺序:
现在你可以做另一个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.