git - 添加功能分支以分解 master
问题描述
我最近开始做一个废弃的项目,当时我对 git 不太了解,结果是 master 分支中有很多提交,这些提交应该是在 release/feature 分支上创建的。所以我考虑重组回购。
我尝试将提交移动到其他分支,但这给我留下了一个问题,即我仍然需要以某种方式获得最终提交以与 master 合并,我不知道该怎么做。
有没有办法将 Repo 重组为多个开发分支,并且仍然在 master 中发布版本而不会丢失提交?
解决方案
如果我理解正确,你想重写主分支的历史。
根据经验,重写已推送到远程的任何分支(尤其是主分支)的历史记录通常不是一个好主意。它可能导致失去其他人的贡献并破坏他们的本地回购。更多关于这里。
如果多个人一直在为您的 repo 做出贡献(或者如果您有很多提交),我建议您接受过去并立即开始使用发布/功能分支构建您的 repo,并称之为一天。
如果你真的想从一开始就有一个干净的提交历史,你需要重写整个历史而不丢失任何步骤,这就是我想做的事情:
将您的存储库复制到文件系统的其他位置以进行备份。
使用 Git 日志,我会发现每组提交都可以放在同一个功能分支中。我会记下最后一次提交哈希和相关的功能标题。
对于这些组中的每一个,我都会创建一个功能分支
- 从大师开始
git checkout master
- 创建并切换到新功能分支
get checkout -b <name of the feature>
- 删除自上次以来的所有提交
git reset --hard <the hash of the last commit of the feature>
- 从大师开始
现在你有一堆不错的特性分支,你需要将它们合并到 master 中。但首先,您需要清除 master 上的所有提交历史。您可以通过将分支重置为第一次将其提交到 git 日志来做到这一点:
git reset --hard $(git rev-list --max-parents=0 HEAD)
最后,按照首先添加提交的顺序,您可以
git merge <a feature branch>
为您在步骤 2 中创建的每个分支执行此操作。如果您没有忘记任何提交并尊重它们出现的顺序,那么您不应该任何冲突。
推荐阅读
- python - Python Tkinter - 不确定如何使用 messagebox.askretrycancel() 函数
- node.js - package-lock.json 中的 http 存储库依赖项
- r - 为什么 vecsets 包的 vunion 函数中的多个选项不适用于字符向量?
- r - 从R中的表达式对象中提取字符串
- yii2 - Yii2一页有多个ListView
- package - 安装“atom-beautify@0.33.0”失败
- c - 无法接收自定义以太网帧
- typescript - 我可以在打字稿项目中使用 CommonJS 模块系统吗?
- hadoop - 无法使用“ROW FORMAT SERDE”创建 HIVE 表
- python - 从子目录导入模块