2012-08-24 3 views
0

개발자가 코드를 다양한 명명 된 분기에 커밋하는 동안 오류가 발생하는 리포지토리가 있습니다. 주요 지점의 일부가 될Hg Named Branch Errant 커밋 정리

A - B - C 
\ 
    W - X - D - E - Y - Z 

하는 ABCDE 모든 (가정), 그리고 WXYZ는 새로운 이름 분기에 커밋 있습니다 : 기본적으로, 무슨 일하면이이었다. 개발자는 'D'와 'E'를 변경하기 전에 'C'로 업데이트하지 못하고 그 위에 'Y'와 'Z'를 저지했습니다.

WXYZ를 포함하지 않고 메인 브랜치에 'D'와 'E'를 이동해야합니다.

A - B - C - D - E 
\ 
    W - X - Y - Z 

저는 전반적으로 HG에 능숙하지는 않지만 배우고 자발적입니다. 나는 rebase를 보았다. 그리고 그것은 내가 갈 곳이없는 나를 데리고 오는 것처럼 보이지 않는다. 내가 dev에 변경 사항을 철회하고 적절한 위치에 다시 적용 할 수는 있지만 정확하게 '옳은'것처럼 보이지는 않습니다.

어떻게이 문제를 해결 하시겠습니까?

감사합니다.

답변

2

가장 안전한 방법은 아마도 한 분기에서 다른 분기로 수정본을 복사 한 다음 다음 명령을 사용하여 커밋 된 분기에서 다시 복사하는 것입니다 (문자 집합을 해당 변경 집합의 개정 번호로 대체하십시오) :

> hg up C 
> hg graft D:E 
> hg up Z 
> hg backout D:E 
> hg commit -m "Backout changes D to E" 

이것은 기본 분기를 그대로 유지하지만 명명 된 분기에는 한 번의 커밋으로 철회 된 몇 가지 나쁜 수정본을 남깁니다. 당신이 hg rebase와 역사를 편집하려면

당신은 다음 명령을 수행 할 수 있습니다

> hg rebase -r Y:Z -d X 
> hg rebase -r D:E -d C -D 

당신은 아마 (hg phase -d rev는 것을 않는이 일을하기 전에 초안을 변경 집합의 위상을 변경해야합니다)

리포지토리 경로로 이동하면 저장소의 모든 복제본이 삭제되고 다시 복제되어 제거 된 기록이 다시 나타나지 않는지 확인해야합니다. 당신이 큰 팀을 가지고 있다면 그것은 위험 할 수 있습니다. 그래서 나는 첫 번째 옵션을 제안했습니다.

+0

감사합니다 .... 나는 내가 할 일이 좀 더 있음을 알 수있다. 전에 '위로'와 '접목'명령을 본 적이 없습니다. – reidLinden

+0

오 ... 나는 '업'이 단지 '업데이트'에 대한 속기라고 생각합니다 ..... – reidLinden

+0

음, 'rebase -r'과 'graft'명령이 없습니다. 그냥 재미있는 오류가납니다. 또한, Y : Z 슬라이스에 리베이스하면 오류가 발생합니다 ("# 1 : # 2"사용). 그것은 왜 작동하지 않았는지 확실하지 않지만 rebase가 '-s'스위치로 작업 할 수 있었지만 내 최종 결과 (내 db의 테스트 복제본에서)는 내가 원하는 방식대로 나오지 않았습니다. .. – reidLinden

1

스티브 케이 (Steve Kaye)가 게시 한 우수한 백 아웃 아이디어 외에도 Mercurial Queues 확장명을 사용하여 패치 대기열을 시험해 보는 것이 좋습니다. D, E, Y 및 Z를 패치 대기열로 가져 오면 B 위에 패치 D와 E를 적용한 다음 X 위에 Y와 Z를 적용 할 수 있습니다.

ABCD 분기가 변경된 경우 WXYZ에서, 이것은 아무 문제없이 성공해야합니다. 그러나 ABCD 및 WXYZ 변경 사항이 비슷한 경우 (즉, 파일의 동일한 줄을 만지거나 파일 이름 바꾸기 등) 거부 된 파일을 얻을 수 있습니다.

+0

그래요, 대기열에서는 가능할 것이라고 생각했지만, 아직 사용법을 배울 기회는 없었습니다. – reidLinden

관련 문제