GIT - 在单独的分支上重写核心代码

标签 git

我有这种情况,我认为这种情况并不罕见,但我正在努力寻找如何在网上正确完成的示例。

我们有我们的项目,有一个 master 分支。对于我的示例,假设主控的当前状态标识项目的 v1.5.0。

现在我们决定编写 v2.0.0,将对其进行大量更改和重写,文件将被完全移除和删除。这种重写现在发生在我们称之为不稳定的新分支上。

在 v1.5.0 中需要添加不稳定的功能和/或错误修复需要一周左右的时间,没问题我们说新分支 - 编写功能 - 与主分支 merge 。大师现在是v1.6.0。

现在,此修复/功能不适用于项目的新版本,因为整个项目正在重写。

我们在 unstable 分支上完成了 v2.0.0,该分支最初基于 ma​​ster 分支的 v1.5.0,现在说... v1.8.4 -在不破坏 1.5 到 1.8.4 版本的历史记录或在 merge 分支中留下 2.0.0 之前版本的人工制品并可能破坏 v2.0.0 中编写的新代码的情况下,您将如何将不稳定分支与主分支 merge ?

最佳答案

您可能已经知道 git merge -s ours,它做的与您想要做的完全相反:它忽略 source 分支中的更改并让 merge 结果与 target 分支的内容完全相同。但是,没有相应的 -s theirs,原因我不打算在这里讨论。

因此,我们必须即兴创作具有相同效果的东西。粗略的概述:在不提交的情况下进行 merge ,神奇地将 2.0.0 代码混入其中,然后完成 merge 。

首先,确保没有未提交的更改。我们将在这里使用有趣的技巧;保修无效等等。

  1. 在 master 上,git merge -n unstable-n 将确保 merge 尚未提交,即使没有冲突(当然,由于大量重写,您会遇到冲突,但请注意安全)。
  2. 这就是魔法:git read-tree --reset -u unstable(将 unstable 读入索引并相应地更新工作树,忽略任何冲突)
  3. git commit 完成 merge 。它现在在其历史 中既有旧的也有新的,但 中只有 2.0.0 的东西。
  4. 检查整个过程是否没有留下您以前的主版本的未跟踪文件。我不确定这是否真的会发生,但检查一下也无妨。

关于GIT - 在单独的分支上重写核心代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17742458/

相关文章:

git - 修改我从中 fork 的 Github 存储库

git - 将提交从一个分支移动到另一个分支

python - 维护 PIP 存储库

Git basic - 将旧分支 merge 到master

git - 如何使用 git 跟踪另一个目录中的更改?

git - 在 vagrant 中安装 docker

git - 如何删除git中的 merge 结果

windows - 如何将 Araxis 设置为 MSYS git 的差异/merge 工具?

git - Drools 6 Workbench 可以推送到远程 git 存储库吗?

git - git 中的 "stash apply"覆盖从 pull 中获得的更改