문제

기능 지점에서 작업을 마쳤습니다 feature-x. 결과를 다시 합병하고 싶습니다 default 지점과 닫기 feature-x 출력에서 그것을 제거하기 위해 hg branches.

다음 시나리오를 생각해 냈지만 몇 가지 문제가 있습니다.

$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch

그래서 feature-x 분기 (Changests 40-41) 폐쇄되었지만 있습니다 하나의 새로운 머리, 닫는 분기 변경 세트 44, 그것은 나열 될 것입니다 hg heads 매번 :

$ hg log ...
o  44 Closed branch feature-x
|
| @  43 merge
|/|
| o  42 Changeset C
| |
o |  41 Changeset 2
| |
o |  40 Changeset 1
|/
o  39 Changeset B
|
o  38 Changeset A
|

업데이트: 버전 1.5 이후 수은 이후 hg heads 더 이상.

머리를 하나 더 남기지 않고 합병 된 지점을 닫을 수 있습니까? 기능 분기를 닫는 더 정확한 방법이 있습니까?

관련 질문 :

도움이 되었습니까?

해결책

한 가지 방법은 병합 된 기능 분기를 열어 두는 것입니다.

$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
feature-x  41:...
    (2 branches)

$ hg branches -a
default    43:...
    (1 branch)

또 다른 방법은 추가 커밋을 사용하여 병합하기 전에 기능 분기를 닫는 것입니다.

$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch
$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
    (1 branch)

첫 번째는 더 간단하지만 열린 가지가 남습니다. 두 번째는 열린 머리/가지가 남지 않지만 보조 커밋이 하나 더 필요합니다. 이 추가 커밋과 기능 분기에 마지막으로 실제 커밋을 결합 할 수 있습니다. --close-branch, 그러나 어떤 커밋이 마지막으로 무엇인지 미리 알아야합니다.

업데이트: Mercurial 1.5이므로 언제든지 분기를 닫을 수 있으므로 둘 다에 나타나지 않습니다. hg branches 그리고 hg heads 더 이상. 당신을 괴롭힐 수있는 유일한 것은 기술적으로 개정 그래프가 여전히 Childen없이 한 가지 더 개정을 가질 것이라는 것입니다.

업데이트 2: Mercurial 1.8 이후 북마크 Mercurial의 핵심 특징이되었습니다. 북마크는 지명 된 분기보다 분기에 더 편리합니다. 이 질문도 참조하십시오.

다른 팁

IMHO 닫는 것을 잊어 버린 가지에 대한 두 가지 사례가 있습니다.

사례 1 : 분기가 기본적으로 병합되지 않았습니다

이 경우 나는 지점으로 업데이트하고 -Close-Branch로 다른 커밋을 수행합니다. 불행히도 이것은 지점이 새로운 팁이되도록 선택합니다. 따라서 다른 클론으로 밀기 전에 실제 팁이 더 많은 변화와 다른 사람들을 받도록합니다. 그 이상한 팁에 대해 혼란스러워하지 마십시오.

hg up myBranch
hg commit --close-branch

사례 2 : 분기가 기본적으로 병합되었습니다

이 사례는 사례 1과 크게 다르지 않으며 사례 1 및 2 개의 추가 단계에 대한 단계를 재현하여 해결할 수 있습니다.

이 경우 나는 분기 변경 세트로 업데이트하고 -Close-Branch로 다른 커밋을 수행하고 팁이 된 새로운 변경 사항을 기본값으로 병합합니다. 마지막 작업은 기본 브랜치 인 Hooray에있는 새 팁을 만듭니다!

hg up myBranch
hg commit --close-branch
hg up default
hg merge myBranch

이것이 미래의 독자들에게 도움이되기를 바랍니다.

편집하다 아야, 너무 늦었습니다 ... 나는 당신이 feature-x 변경 사항을 유지하고 싶다는 의견을 읽었으므로 여기서 복제 접근 방식이 작동하지 않습니다.

나는 여전히 다른 사람들에게 도움이 될 수 있기 때문에 여기에 답을 보내겠습니다.

예를 들어 "기능 x"를 완전히 제거하려면 예를 들어 작동하지 않기 때문에 복제 할 수 있습니다. 이것은 기사에 설명 된 방법 중 하나이며 작동하며 헤드에 대해 구체적으로 이야기합니다.

내가 이해하는 한 당신이 이것을 가지고 있고 "feaction-x"헤드를 한 번에 제거하고 싶어합니다.

@    changeset:   7:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| | o  changeset:   5:013a3e954cfd
| |/   summary:     Closed branch feature-x
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

그래서 당신은 이것을합니다 :

hg clone . ../cleanedrepo --rev 7

그리고 당신은 다음을 가질 것이고, 당신은 feature-X가 실제로 사라 졌다는 것을 알 수 있습니다.

@    changeset:   5:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

나는 당신이 원하는 것을 오해했을지 모르지만 제발 수정하지 마십시오. 나는 당신의 유스 케이스를 재현하는 데 시간이 걸렸습니다 :)

아직 아무도 기능 지점을 닫는 가장 강력한 방법을 제안한 것이 이상합니다. 결합시키다 -Close-Branch 플래그와 병합 커밋 (즉, 수정 된 파일 커밋 및 지점을 동시에 닫습니다) :

hg up feature-x
hg merge default
hg ci -m "Merge feature-x and close branch" --close-branch
hg branch default -f

그래서 그게 전부입니다. Revgraph에 여분의 머리가 없습니다. 추가 커밋이 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top