기능 분기 작업을 마쳤습니다 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 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 branches
및 hg 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에 여분의 머리가 없습니다. 추가 커밋이 없습니다.