git tfs:如果在tfs中有另一个签入时如何rcheckin git提交?

时间:2014-04-07 19:35:33

标签: git tfs git-tfs

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

在尝试更改他的更改之前,我们将其功能分支合并到主分支中。由于他没有提交任何东西,所以发生了快进,导致单个流git日志。 不幸的是,由于最初的克隆另一个(完全不相关)签入发生在TFS上。 当我们尝试rcheckin时,我们收到以下错误消息:

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签到?

2 个答案:

答案 0 :(得分: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,如果存在冲突,则命令将退出。你将不得不解决它们并再次执行命令。

答案 1 :(得分:1)

您可以简单地执行插件所说的内容,并在TFS的新更改之上重新定义git repo的master版本,其中包含远程工作者的工作。 rebase将保留原始提交的顺序......但如果存在冲突,则必须在发生冲突的提交中解决这些冲突。

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

Documentation for git-tfs pull