답변:
Mark가 제안한 것처럼 MqExtension 은 문제에 대한 하나의 솔루션입니다. IMHO 더 간단한 워크 플로는 rebase 확장 을 사용하는 것 입니다. 다음과 같은 역사가 있다고 가정합니다.
@ changeset: 2:81b92083cb1d
| tag: tip
| summary: my new feature: edit file a
|
o changeset: 1:8bdc4508ac7b
| summary: my new feature: add file b
|
o changeset: 0:d554afd54164
summary: initial
즉, 개정 0
은 기능 작업을 시작한 기반입니다. 이제 1-2
명명 된 브랜치에 대한 수정을 원합니다 my-feature
. 개정판으로 업데이트하고 0
해당 분기를 만듭니다.
$ hg up 0
$ hg branch my-feature
$ hg ci -m "start new branch my-feature"
이제 역사는 다음과 같습니다.
@ changeset: 3:b5939750b911
| branch: my-feature
| tag: tip
| parent: 0:d554afd54164
| summary: start new branch my-feature
|
| o changeset: 2:81b92083cb1d
| | summary: my new feature: edit file a
| |
| o changeset: 1:8bdc4508ac7b
|/ summary: my new feature: add file b
|
o changeset: 0:d554afd54164
summary: initial
rebase
명령을 사용하여 개정 1-2
을 개정 으로 이동 하십시오 3
.
$ hg rebase -s 1 -d 3
결과는 다음과 같습니다.
@ changeset: 3:88a90f9bbde7
| branch: my-feature
| tag: tip
| summary: my new feature: edit file a
|
o changeset: 2:38f5adf2cf4b
| branch: my-feature
| summary: my new feature: add file b
|
o changeset: 1:b5939750b911
| branch: my-feature
| summary: start new branch my-feature
|
o changeset: 0:d554afd54164
summary: initial
그게 다야 .. Mark의 답변에 대한 주석에서 언급했듯이 이미 푸시 된 변경 집합을 이동하는 것은 일반적으로 통신하고 기록 조작을 시행 할 수있는 소규모 팀에서 일하지 않는 한 나쁜 생각입니다.
fold
현재 내장 된 histedit 확장 의 명령 사용 ).
hg log -G
( GraphlogExtension ). 수동으로 일부 줄을 제거했지만 사용자 지정 로그 스타일을 사용하여 완전히 자동으로 렌더링 될 수도 있습니다 .
MqExtension을 사용할 수 있습니다 . 이동할 변경 집합이 개정 1-3이라고 가정 해 보겠습니다.
hg qimport -r 1:3 # convert revisions to patches
hg qpop -a # remove all them from history
hg branch new # start a new branch
hg qpush -a # push them all back into history
hg qfin -a # finalize the patches
여기 에 Mark Tolonen이 설명하는 패치 솔루션을 선호합니다.
내가 가진 것 :
hg log -G
#default branch
@ changeset: 3:cb292fcdbde1
|
o changeset: 2:e746dceba503
|
o changeset: 1:2d50c7ab6b8f
|
o changeset: 0:c22be856358b
내가 원하는 것 :
@ changeset: 3:0e85ae268e35
| branch: feature/my_feature
|
o changeset: 2:1450cb9ec349
| branch: feature/my_feature
|
o changeset: 1:7b9836f25f28
| branch: feature/my_feature
|
/
|
o changeset: 0:c22be856358b
수은 명령 :
hg export -o feature.diff 1 2 3
hg update 0
hg branch feature/my_feature
hg import feature.diff
다음은 내 로컬 저장소의 상태입니다.
@ changeset: 6:0e85ae268e35
| branch: feature/my_feature
|
o changeset: 5:1450cb9ec349
| branch: feature/my_feature
|
o changeset: 4:7b9836f25f28
| branch: feature/my_feature
|
| o changeset: 3:cb292fcdbde1
| |
| o changeset: 2:e746dceba503
| |
| o changeset: 1:2d50c7ab6b8f
|/
|
o changeset: 0:c22be856358b
이제 기본 브랜치에서 수정 1 2 및 3을 삭제해야합니다. mq의 확장에서 strip 명령으로이를 수행 할 수 있습니다.
hg strip
저장소에서 변경 집합과 모든 하위 항목을 제거합니다.
구성 파일 (.hgrc 또는 Mercurial.ini)에 다음 줄을 추가하여 확장을 활성화합니다.
vim ~/.hgrc
다음을 추가하십시오.
[extensions]
mq =
이제 리비전 1에서이 저장소를 제거합니다.
hg strip 1
그리고 여기 우리는
@ changeset: 3:0e85ae268e35
| branch: feature/my_feature
|
o changeset: 2:1450cb9ec349
| branch: feature/my_feature
|
o changeset: 1:7b9836f25f28
| branch: feature/my_feature
|
o changeset: 0:c22be856358b
참고 : 변경 세트는 다르지만 개정은 동일합니다.
GUI를 사용하려는 사람들을 위해
Tortoise Hg
-> File
-> Settings
로 이동 한 다음를 선택 rebase
합니다.거북이 UI 다시 시작
변경 사항을 이동할 새 분기를 만듭니다. 현재 지점 이름을 클릭-> 선택 Open a new named branch
-> 지점 이름을 선택하십시오.
public
(예 :) draft
5로 이동합니다. (변경 사항이 이미 게시되어 있고 수석 개발자가 아닌 경우 큰 시간을 낭비 할 수 있으므로 수석 누군가에게 이야기해야합니다 (희생양 확보). , 나는 어떤 책임도지지 않습니다 :)).View
-> Show Console
(또는 Ctrl+ L)로 이동 한 다음 콘솔에 씁니다. hg phase -f -d 2
여기서 2는 가장 낮은 개정판이며 새 분기로 이동합니다.
브랜치 및 리비전으로 이동합니다 (3 단계에서 생성 된 새 브랜치로 변경 사항을 이동하는 경우 최상위 리비전이어야 함) Right Mouse
->Update
변경 사항을 이동할 지점 및 revsion으로 이동 Right Mouse
-> Modify History
->Rebase
Rebase
갈등이 없도록 클릭 하고기도 하십시오 . 필요한 경우 병합하십시오.
변경 사항을 푸시합니다 draft
. 이 시점에서 모든 개정은 여전히이어야 합니다.
변경 사항을 Right Mouse
-> Change Phase to
-> 으로 이동 한 분기의 최상위 개정으로 이동하십시오 Public
.
이것이 시간을 절약하기를 바랍니다.
public
더 이상 자동으로 변경되지 않습니다 (적어도 저에게는 그렇지 않습니다).