2

对于无法访问 TFS 的远程工作者,我们使用 git tfs 克隆了 TFS 存储库。当我们取回他的存储库时,我们看到他在一个新的功能分支上工作。

在尝试重新检查他的更改之前,我们将他的功能分支合并到主分支中。由于他没有向 master 提交任何内容,因此发生了快进,产生了单个流 git log。不幸的是,由于最初的克隆在 TFS 上发生了另一个(完全不相关的)签入。当我们尝试重新签入时,我们收到以下错误消息:

Fetching changes from TFS to minimize possibility of late conflict...
error: New TFS changesets were found.
You may be able to resolve this problem.
- Try to rebase HEAD onto latest TFS checkin and repeat rcheckin or alternatively checkin s

如果我们需要所有提交都反映为 TFS 上的签入,我不明白建议的 rebase 会有什么帮助。

在这种情况下,有什么方法可以将所有 git 提交作为单独的 TFS 签入?

4

2 回答 2

2

@Cupcake 的答案很好,但我想补充一些东西......

如果您想在刚刚签入时比 tfs 工作流更接近并在此步骤中解决合并冲突,您可以使用:

git tfs rcheckin --quick --autorebase

这相当于:

git tfs pull --rebase
git tfs rcheckin

这不一定是更好的事情,因为通常在pull --rebase(您的更改和来自 tfs 的更改被“合并”的位置)和rcheckin(您将更改推送到 tfs 的位置)之间,您至少应该构建您的解决方案并运行你的单元测试。

但我认识到有时它会容易得多,我的团队(所有老 tfs 用户)只想这样做!

您还应该知道,在pull --rebase您的更改与团队中的更改“合并”的步骤中,这是在文件级别完成合并的地方,就像您签入时使用 tfs 一样,您必须解决冲突。

在 的情况下rcheckin --quick --autorebase,如果有冲突,命令将退出。您将不得不解决它们并再次启动该命令。

于 2014-04-08T08:52:56.597 回答
1

master您可以简单地按照插件的说明进行操作,并在 TFS 的新更改之上重新设置 git repo 的版本,其中包含远程工作者的工作。变基将保留原始提交的顺序……尽管如果存在冲突,则必须在发生冲突的提交上解决这些冲突。

git tfs pull --rebase
git tfs rcheckin

您也可以只使用git tfs fetch然后使用 git 的本机 rebase 工具来执行此操作,但这将涉及更多步骤...... git-tfs 命令应该为您处理所有这些。

此外,以防万一,由于某种原因,rebase 最终会给你一个你不想要的结果master,如果你需要的话,可以在你可以硬重置的尖端放置一个临时分支:

git branch temp master
git tfs pull --rebase

# In case you don't like the rebase results:
git reset --hard temp

# Or if you like the results, check-in
git tfs rcheckin

git-tfs pull 的文档

于 2014-04-07T20:38:34.650 回答