2014-04-04 3 views
4

자식 TFS가 병합 커밋을 만들 수 없습니다, 그것은 documentation 당으로 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>해야하나요?

답변

2

예, 이제 git-tfs는 변경 사항 집합을 병합 할 때 병합 커밋을 만들려고합니다 (이제는 만족스러운 분기 지원이 있음).

이 메시지는 단지 경고 메시지를 표시하고 당신이 그것을 볼 때, 당신은이 옵션을 ...이

첫 번째는 당신이 알고 있기 때문에 아무것도하지 않는 것입니다
  • 는, exemple에 대한 오래된 것을 기능 브랜치는 결코 작동하지 않을 것이며 더 중요한 미래에 부모 브랜치에서 다시 병합되지 않을 것입니다.

  • 두 번째 것은이 병합 커밋이 실제로 필요한 경우입니다. 왜냐하면 당신은 여전히이 지점에서 일하고 상위 지점에서 병합해야하기 때문에 좋은 역사가 필요하거나 더 중요하기 때문입니다.

  • 이를 위해 원격 사용자의 TFS를 재설정해야합니다 사실은 이미 이전 버전에서 어떻게 자식-TFS 작품과 사람들을 위해 호환성을 유지 --to 생성 된 커밋 때문에

(즉 수 없습니다 가지로 일해라 -).

리모컨을 재설정하려면 reset-remote 명령을 사용해야합니다.

그런 다음 상위 분기에 병합 된 분기를 branch --init으로 초기화합니다.

또한 로컬 분기를 tfs 리모컨으로 재설정합니다 (내부 git-tfs 최적화로 인해).

그리고 다시 상위 분기를 가져옵니다. 이 이전

을했다면, 그래서)

을, 이제 병합 된 지점이 존재하고 인출되어, 자식-TFS는 병합 된 지점에서 부모 변경 집합을 발견 할 것이다 당신은 당신의 자식 저장소에 커밋 아름다운 병합을해야합니다

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 옵션을 사용합니다.

+0

나는 내 대답을 이해할 때 사용한 명령을 추가했습니다. 잘못된 것이 있으면 수정하십시오. – IsmailS

+0

모두 좋습니다. 한 명령을 저장하기 위해 업데이트 (fetch + reset 대신 pull 명령 사용)하고'git clone --with-branches'를 사용하여 이러한 경우를 피하기 위해 추가하지 마십시오. – Philippe

+0

FYI, v0.19.2가 있다면 모든 git-tfs 명령에서'-i nameOfMyRemote' 대신'-I' 옵션을 사용할 수 있습니다. 사용하기 좋은 리모컨을 선택합니다 .... – Philippe