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

Mik*_*ock 8 git

我有这种情况,我不认为这种情况并不常见,但我正在努力寻找一个如何在网上正确完成的例子.

我们有我们的项目,有一个主分支.对于我的例子,我们可以说master的当前状态标识了项目的v1.5.0.

现在我们决定编写v2.0.0,将发生大规模的更改和重写,文件将被完全删除和删除.这个重写现在发生在我们称之为不稳定的新分支上.

在一段时间内开发不稳定的功能和/或修补程序需要添加到v1.5.0,没问题我们说新的分支 - 写入功能 - 与主服务器合并.主人现在是v1.6.0.

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

我们在不稳定的分支上完成了v2.0.0,这个分支最初是基于分支的v1.5.0,现在说是... v1.8.4 - 如何在不使用主分支的情况下合并不稳定分支:破坏版本1.5到1.8.4的历史记录,或者在合并的分支中保留2.0.0之前版本的伪像,并可能破坏在v2.0.0中编写的新代码?

Jan*_*ger 5

您可能已经知道git merge -s ours,这不正是你想要做什么相反:它忽略了的变化分支,让合并的结果是完全相同的内容目标分支.-s theirs但是,没有相应的原因,我不打算进入这里.

所以,我们必须即兴创作具有相同效果的东西.粗略的轮廓:在没有提交的情况下进行合并,将2.0.0代码神奇地破坏到其中,然后完成合并.

首先,请确保您没有未提交的更改.我们将在这里使用有趣的技巧; 保修无效以及所有这些.

  1. 在主人,git merge -n unstable.这-n将确保合并尚未提交,即使没有冲突(当然,由于您的大量重写,您将会遇到冲突,但让我们保持安全).
  2. 这是神奇的:( git read-tree --reset -u unstableunstable入索引并相应地更新工作树,忽略任何冲突)
  3. git commit完成合并.它现在将有历史新旧两种,但树中只有2.0.0的东西.
  4. 检查这整件事情是否保留了以前主版本的遗留物作为未跟踪文件.我不确定这是否真的会发生,但检查不会有什么坏处.

  • @MikeHancock是的.人们可能更常做的是,他们直接在master上进行下一个大版本的所有开发,并在单独的分支上进行维护工作.例如,这就是Git本身的开发方式.对于下一个稳定版本它有`master`,对于旧版本有`maint`,'next`用于大致β品质的东西,意味着毕业于'master`,而'pu`用于不稳定的东西.尽管如此,如果你在发布一个新的稳定版本之后将"maint"推向一个新版本,你可能最终不得不做你所要求的事情. (2认同)