然后在TFS中回滚父分支



我对TFS没有太多经验,也找不到做我想做的事的方法。

好的,我们在TFS中有一个主分支,我们开始对这个分支进行新的开发。我们完全忘记了在开始修改之前创建一个新的。

最后,我想要的是我的主分支处于修改前的状态(我有确切的变更集编号),以及一个正在进行工作的开发分支。。。

以下是我所做的:

  • 将当前状态下的主分支分支为"开发"分支
  • 在我们开始修改之前,将主分支回滚到最新的变更集

在这一点上,我认为我还可以,但当我试图将开发分支合并到主分支时,VS正确地表示,它找不到任何签入到我的开发分支但没有签入到主分支的变更集,因为回滚并没有删除变更集,只是添加了一个新的变更集。

我想也许在Development分支中签入一些新的东西可以解除阻塞,但不幸的是,似乎只有最新的(分支后)签入才有资格合并。

我肯定做错了什么,或者做得不对。

有人对如何实现我的目标有什么解释和想法吗?

因为您的情况经常发生(在主分支上工作,后来才意识到您应该已经分支),所以TFS(命令行和Visual Studio中)都支持这种用例。

您不想指定By Latest(默认值)或By: Latest Version,而是希望指定By: Changeset并选择应包含在分支中的最后一个签入。之后的所有签入都会从分支中排除,但之后可以合并(如果需要,可以选择变更集)。

或者,您可以在工作区中获取特定版本(get-specific version),并在创建分支时指定By: Workspace。按日期或标签也是有效的选择,但我不经常使用它们。

回滚不是传统意义上的回滚。它将代码恢复到您想要的状态,但您需要将回滚作为新的更改签入。这将保留代码的完整历史记录,包括回滚。

我建议你:

  1. 删除您的子分支
  2. 即使您有一些额外的签入和回滚,也要将父分支置于所需的状态
  3. 一旦所有内容都已完全签入,则分支到您的子分支

回滚是一个普通的变更集,您可以像其他任何变更集一样回滚它。以下是你本可以做的:

  1. 从主分支创建一个开发分支
  2. 回滚主分支中不需要的更改
  3. 在主分支中签入回滚。这将创建变更集#XYZ

此时,请在开发分支中继续您的开发。您也可以检入主分支中的更改。完成开发时:

  1. 回滚主分支中的回滚(变更集#XYZ)
  2. 将更改从开发分支合并到主分支

最后一个操作应该只合并分支后在开发分支中所做的更改。

根据更改和分支配置的复杂性,这可能是最简单的方法。

最新更新