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 つのオプションがあります...

  • 最初のものは何もしないことです。たとえば、それが古い機能ブランチであり、将来的には親ブランチに再びマージされることは決してないことがわかっているためです。

  • 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

コードのマージが原因で 3 つすべての警告を受け取った場合は、次のようにする必要があります。

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 に答える