4

当 git tfs 无法创建合并提交时,它说 warning: this changeset 7504 is a merge changeset. But it can't have been managed accordingly because one of the parent changeset 7494 is not present in the repository! If you want to do it, fetch the branch containing this changeset before retrying...

根据文档Note: if you see a warning, you could correct that by reseting the tfs remote to a previous commit. Then fetch the merged branch and retry to fetch the branch.

任何人都可以详细说明reseting the tfs remote to a previous commit。虽然,我现在已经获取了合并的分支,但我不明白如何将其重置为之前对失败分支的提交。我不确定,但我必须这样做git checkout <hash of the previous commit>吗?

4

1 回答 1

2

是的,现在 git-tfs 在遇到合并变更集时尝试创建合并提交(现在它具有令人满意的分支支持)。

此消息只是一条警告消息,当您看到它时,您有 2 个选项...

  • 第一个是什么都不做,因为你知道它是一个旧的特性分支,你永远不会在那个分支上工作,更重要的是,将来你永远不会在你的父分支中再次合并。

  • 第二个是如果你真的想要这个合并提交。因为你想要一个好的历史或者更重要的是因为你仍然在这个分支上工作并且必须将它合并到父分支中。

为此,您将不得不重置您的 tfs 远程(因为实际上已经创建了提交——以保持与 git-tfs 在以前版本中的工作方式以及那些不能与分支一起工作的兼容性——)。

要重置遥控器,您必须使用reset-remote命令。

然后使用branch --init 初始化在父分支中合并的分支。

还将本地分支重置为 tfs 远程(由于内部 git-tfs 优化)。

并再次获取父分支。现在合并的分支存在并且正在获取,git-tfs 将从合并的分支中找到父变更集,您将在您的 git 存储库中拥有一个漂亮的合并提交;)

所以,如果你早点这样做

git tfs clone https://CompanyName.visualstudio.com/DefaultCollection "$/CompanyName/Main" KfGitMain --workspace="C:\TFS\Main"
cd GitMain
git tfs branch --init "$/CompanyName/Release/20140121.1" live20140121.1
git tfs branch --init "$/CompanyName/Release/20140121.1-hotfix" hotfix20140121.1

如果您由于代码相互合并而收到所有三个警告,那么您将不得不

git checkout hotfix
git tfs reset-remote 5fb83335b8dfc6fbb96e0a54a48dc06c506e3277 ## previous commit of the first failed commit
git reset --hard tfs/hotfix
git tfs pull -i hotfix

git checkout live
git tfs reset-remote eba62a1446f3f81676d051336ca254fe54c37d74
git reset --hard tfs/live
git tfs pull -i live

git checkout master
git tfs reset-remote 72727737ec52f9b96d22d343770186a342c8b166
git reset --hard tfs/default
git tfs pull -i default

注意:如果您没有太多分支和/或奇怪的 tfs 历史记录,则可以使用将初始化并获取所有分支以处理合并变更集git clone的选项来避免所有这些--with-branches

于 2014-04-04T09:04:21.243 回答