[merge] Mercurial에서 기능 분기를 올바르게 닫는 방법은 무엇입니까?

기능 분기 작업을 마쳤습니다 feature-x. 의 출력에서 ​​결과를 제거하기 위해 결과를 default분기로 다시 병합 하고 닫고 싶습니다 .feature-xhg 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 4041) 폐쇄,하지만이되어 하나의 새로운 머리 , 닫는 지점 변경 집합 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 Mercurial은 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있지만 어떤 커밋이 마지막 커밋인지 미리 알고 있어야합니다.

업데이트 : 그것은 모두에 표시되지 않도록 언제든지 분기를 닫을 수 있습니다 의욕 1.5 이후 hg brancheshg heads이상. 성가 시게 할 수있는 유일한 것은 기술적으로 개정 그래프가 여전히 자녀없이 개정을 한 번 더한다는 것입니다.

업데이트 2 : Mercurial 1.8 북마크 는 Mercurial 의 핵심 기능이되었습니다. 북마크는 명명 된 브랜치보다 브랜칭하기에 더 편리합니다. 이 질문도 참조하십시오 :


답변

imho 닫는 것을 잊어 버린 가지에 대한 두 가지 경우가 있습니다

사례 1 : 지점이 기본값으로 병합되지 않았습니다

이 경우 지점으로 업데이트하고 –close-branch로 다른 커밋을 수행합니다. 불행히도 이것은 지점을 새로운 팁으로 선택하므로 다른 클론으로 푸시하기 전에 실제 팁에 더 많은 변경 사항 및 기타 사항이 적용되도록합니다. 그 이상한 팁에 대해 혼동하지 마십시오.

hg up myBranch
hg commit --close-branch

사례 2 : 지점이 기본값으로 병합되었습니다

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

이 경우 분기 변경 세트로 업데이트하고 –close-branch로 다시 커밋하고 팁이 된 새 변경 세트를 기본값으로 병합합니다. 마지막 작업은 기본 브랜치 인 HOORAY!에 새로운 팁을 만듭니다.

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

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


답변

늦게 편집 편집 … feature-x 체인지 셋을 유지하고 싶다고하는 의견을 읽었으므로 복제 방법이 작동하지 않습니다.

다른 사람들에게 도움이 될 수 있으므로 여기에 대한 답변을 계속하겠습니다.

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

내가 아는 한, 당신은 이것을 가지고 “feature-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에 여분의 머리가 없습니다. 추가 커밋이 없습니다.


답변