2011-09-14 2 views
6

커밋되지 않은 변경 집합이 있습니다. 나는 내가 현재 잘못된 브랜치에 있다는 것을 알아 차렸다. 그래서 내가 커밋하기 전에, 내가 가고자하는 브랜치로 전환하고 싶다.Hg가 거의 잘못된 지점으로 연결됨

Hg에서 얼마나 어려운가?

+0

나는 Mercurial이 Git과 매우 유사하다고 생각한다. 그래서 두 가지 옵션이 있다고 생각합니다. 추가하고 변경 한 모든 파일을 수동으로 저장하고 분기를 전환 한 다음 파일 시스템 맨 위에 복사합니다.또는 현재 브랜치의 변경 사항을 커밋하고, 실제로 원하는 브랜치로 전환하고 이전 브랜치에서 변경 사항을 병합합니다. –

답변

5

는, 당신은 단지

hg update right-branch 

발행 할 수 있으며, 의욕이 대상 버전으로 작업 복사본의 변경 사항을 병합합니다.

완전 병합 도구 인 기계을 사용하면 이름 변경과 같은 사항이 고려되므로 충돌하는 경우 3 방향 병합 프로그램을 사용할 수 있습니다. 선반 및 차등 기반 접근 방식에는이 기능이 없으므로 .rej 파일을 사용하여 직접 충돌을 해결해야합니다. hg resolve --list으로 현재 병합 상태를 확인하고 Mercurial에서 필요한 백업을 수행하므로 선택한 파일을 다시 병합 할 수도 있습니다.

직선 경로가없는 경우, 당신은이 경고를 얻을 것이다 :

abort: crosses branches (merge branches or use --clean to discard changes) 

그런 다음 먼저 공통 조상에 다시 업데이트 한 다음 다시 앞으로 업데이트하여 원하는 것을 얻을 수 있습니다. 나는 왜 우리가이 경고를 내뱉는 지 100 % 확신하지는 않지만, 궁금하다면 메일 링리스트 아카이브를 검색하면 답을 얻어야한다.

1

불행하게도 의욕은 임시 커밋해야하고 적절한 지점에 전송이 rebase 또는 tramsplant을 사용하거나 DIFF을 수동으로 적용하도록 상자 밖으로 선반 지원하지 않습니다. 또한 타사가, 확장을 보류 https://www.mercurial-scm.org/wiki/ShelveExtension

2

https://www.mercurial-scm.org/wiki/AtticExtension 당신이 TortoiseHg를 사용하는 경우, 그것은 THG의 선반 능력 (http://tortoisehg.bitbucket.io/manual/2.9/shelve.html)를 달성하기 위해 매우 쉽게 볼 수 있습니다. 커밋 대화 상자에서 Shelve 버튼 (아이콘이 Z가 겹쳐진 파일)을 클릭하고 이중 오른쪽 화살표를 클릭하여 모든 변경 사항을 제거합니다. 쉘브 대화 상자를 닫고 올바른 변경 집합으로 업데이트 한 다음 쉘브 대화 상자를 열고 이중 왼쪽 화살표를 클릭하여 쉘브 대화 상자를 제거하십시오.

THG를 사용하지 않는 경우 hgshelve 확장 프로그램 (https://www.mercurial-scm.org/wiki/ShelveExtension)을 설치할 수는 있지만 잘 모르겠습니다.

또한 Mercurial Queues (http://mercurial.808500.n3.nabble.com/Shelve-extension-td802439.html)와 동일한 결과를 얻을 수 있습니다.

3

당신은 선반 확장하지 않고이 작업을 수행하고자하는 경우는 다음을 수행하십시오 ../work_in_progress.patch가 원하는 경로 (나는 보통 내 저장소 위에 내 패치를 저장) 할 수 있습니다

hg diff --git > ../work_in_progress.patch 
hg up desired-branch 
hg import --no-commit ../work_in_progress.patch 

desired-branch입니다 실제로 변경 사항을 적용하려는 지점.

당신이있는 지사와 당신이가는 지사가 서로 다르면 패치가 원활하게 적용되지 않으면 내가 발견 한 해결책이 모두 사라지기 시작합니다. 이 경우 수동으로 충돌을 해결해야합니다. 현재 부모 개정 및 대상 버전 사이의 직선 경로가있는 경우