我对TFS没有太多经验,也找不到做我想做的事的方法。
好的,我们在TFS中有一个主分支,我们开始对这个分支进行新的开发。我们完全忘记了在开始修改之前创建一个新的。
最后,我想要的是我的主分支处于修改前的状态(我有确切的变更集编号),以及一个正在进行工作的开发分支。。。
以下是我所做的:
- 将当前状态下的主分支分支为"开发"分支
- 在我们开始修改之前,将主分支回滚到最新的变更集
在这一点上,我认为我还可以,但当我试图将开发分支合并到主分支时,VS正确地表示,它找不到任何签入到我的开发分支但没有签入到主分支的变更集,因为回滚并没有删除变更集,只是添加了一个新的变更集。
我想也许在Development分支中签入一些新的东西可以解除阻塞,但不幸的是,似乎只有最新的(分支后)签入才有资格合并。
我肯定做错了什么,或者做得不对。
有人对如何实现我的目标有什么解释和想法吗?
因为您的情况经常发生(在主分支上工作,后来才意识到您应该已经分支),所以TFS(命令行和Visual Studio中)都支持这种用例。
您不想指定By Latest
(默认值)或By: Latest Version
,而是希望指定By: Changeset
并选择应包含在分支中的最后一个签入。之后的所有签入都会从分支中排除,但之后可以合并(如果需要,可以选择变更集)。
或者,您可以在工作区中获取特定版本(get-specific version),并在创建分支时指定By: Workspace
。按日期或标签也是有效的选择,但我不经常使用它们。
回滚不是传统意义上的回滚。它将代码恢复到您想要的状态,但您需要将回滚作为新的更改签入。这将保留代码的完整历史记录,包括回滚。
我建议你:
- 删除您的子分支
- 即使您有一些额外的签入和回滚,也要将父分支置于所需的状态
- 一旦所有内容都已完全签入,则分支到您的子分支
回滚是一个普通的变更集,您可以像其他任何变更集一样回滚它。以下是你本可以做的:
- 从主分支创建一个开发分支
- 回滚主分支中不需要的更改
- 在主分支中签入回滚。这将创建变更集#XYZ
此时,请在开发分支中继续您的开发。您也可以检入主分支中的更改。完成开发时:
- 回滚主分支中的回滚(变更集#XYZ)
- 将更改从开发分支合并到主分支
最后一个操作应该只合并分支后在开发分支中所做的更改。
根据更改和分支配置的复杂性,这可能是最简单的方法。