当git tfs无法创建合并提交时,如何更正它

时间:2014-04-04 05:42:41

标签: git-tfs

当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...

根据documentationNote: 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>吗?

1 个答案:

答案 0 :(得分:2)

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

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

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

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

要做到这一点,你必须重置你的tfs远程(因为实际上已经创建了提交 - 以保持与以前版本中git-tfs如何工作的兼容性以及那些无法使用它的人枝 - 。)

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

然后将父分支中合并的分支与branch --init初始化。

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

再次获取父分支。现在合并的分支存在并且是fetch,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初始化并获取所有分支可以避免所有这些照顾合并变更集