Mercurial : 지점의 이름을 바꿀 수 있습니까?


204

우리는 이제 "스테이징"브랜치를 가지고 있는데, 여기서 "스테이징"은 훨씬 더 의미 적으로 적합 해 보입니다. 이것을 처리하기위한 좋은 전략은 무엇입니까?

답변:


223

stiging지점으로 업데이트 하고 새 지점을 만듭니다. 그런 다음 이전 지점을 닫으십시오.

요약해서 말하자면:

hg update stiging
hg branch staging
hg commit -m"Changing stiging branch to staging."
hg update stiging
hg commit --close-branch -m"This was a typo; use staging instead."
hg push --new-branch

1
이것이 내가 찾은 가장 좋은 방법입니다. 분기를 닫으면 "hg 분기"출력에 표시되지 않기 때문에 다른 사용자가 실수로 분기를 사용하지 못하게합니다. 이름을 알고 있으면 나중에 액세스 할 수 있습니다.
기구

2
Mercurial은 폐쇄 된 지점의 이름을 재사용 할 수 있습니까? 즉, v3 분기가있는 경우 위의 기술을 사용하여 v4로 이름을 바꾼 다음 닫힌 v3 뒤에 남겨진 상태에서도 v3 분기를 분기 할 수 있습니까?
Joshua Goldberg

4
@JoshuaGoldberg, 3noch가 잘못되었습니다. Mercurial 사용하면 폐쇄 된 지점의 이름을 재사용 할 수 있습니다 --force. 예를 들면 다음과 같습니다 hg branch --force v3.. 원하는대로 hg update v3v3분기 로 업데이트됩니다 .
길리

2
hg help branch와 함께 @Gili의 의견을 확인했습니다 : "
Joshua Goldberg

7
당신이 가까운 경우 stiging분기하기 전에, 당신은 "느슨한 끝"하지 않습니다
max.mustermann

60

향후 독자 : rebase확장 기능을 사용하면 다음 과 같이 동일한 상위를 사용하여 새 분기를 만들고 stiging전체 분기 기록을 해당 분기로 옮길 수 있습니다.

hg update -r "parents(min(branch('stiging')))"
hg branch staging
hg commit
hg rebase --source "min(branch('stiging'))" --dest staging

이것은 stiging하나의 부모 만 있다고 가정합니다 . 물론 명시적인 개정 번호를 대신 사용할 수 있습니다.

분기하는 경우 : 1 참고 stiging다른 분기와 병합을 포함, 내가 생각하는 만큼,이 그들을 보존하는 것 stagingstiging같은 부모가 있습니다. 그러나 나는 확실히 두 번 확인했다.

참고 2 :이 작업은 기록을 편집하므로 이전 브랜치는 복제 된 리포지토리에서 사라지지 않습니다 ( rebase문서 참조 ). 모든 사람이 새로 복제 할 수 없다면 대규모 그룹에게는 그다지 실용적인 해결책이 아닐 수도 있습니다.

참고 3 / 편집 (@JasonRCoombs 제공) : 이제 단계 가 수은 표준 rebase이므로 이미 푸시 된 변경 세트를 수정하지 않습니다. 단계를 다시 초안 (으로 변경)으로 변경 hg phases하거나 이전 지점을 원래 위치에 그대로 두거나 적절하게 이름이 지정된 사본을 만듭니다 (예 :`hg rebase --keep ').


사용자를 강제로 복제 할 수있는 소규모 팀의 경우 +1이 좋습니다 hg convert. 대신 사용하는 것이 좋습니다 .
hochl

5
최신 버전의 Mercurial에서는 변경 될 내용이 "public"인 경우 rebase 명령이 "변경 불가능한 변경 세트를 리베이스 할 수 없습니다"와 함께 실패합니다. 강제로 드래프트 (hg 단계 포함)하거나 --keeprebase 명령을 전달 하면 변경 사항을 이동하는 대신 복사됩니다.
Jason R. Coombs

4 단계에서 : abort: can't rebase immutable changeset 11b1e2b7dc4f. 변경 지점을 다른 지점에서이 지점으로 접목했습니다. 게다가, 그것은 분할 및 병합 무료입니다.
Mark Jeronimus

@Mark, 위의 참고 3을 살펴보십시오.
Alexis

6
대신에 새로운 지점에 변경 집합을 투입 한 후 그 위에 리베이스, 당신은 그 사용을 생략 할 수 있습니다 .당신을 위해 --dest가치와 REBASE가 자동으로 새 지점 이름에 걸립니다.
weberc2

16

변경 세트가 있으면 분기 확장 과 함께 변환 확장 을 사용하여 이름을 변경해야합니다. 모든 사람은 새로운 저장소를 복제하거나 이전 지점을 제거해야합니다.


1
이것은 흥미로운 해결책입니다. 좀 더 자세히 설명해 주시겠습니까?
DrM

15

"스테이징"이라는 새 브랜치를 만들고 다른 것을 잊어 버리십시오.


+1 그게 내가 할 일입니다. 기존 변경 세트에는 여전히 이전 분기 이름이 있지만 새 변경 세트에는 새 분기 이름이 있습니다.
barjak

6

이것은 기록을 수정하며 고급 Mercurial 사용자만을위한 것입니다. 그게 무슨 뜻인지 모르면하지 마십시오.

스테이징이 로컬 전용 인 경우, graftstrip 조합으로 스테이징으로 변경할 수 있습니다 . 스테이징이 발생한 조상 체인지 셋으로 업데이트합니다. 스테이징 브랜치를 작성하고 스테이징에서 스테이징으로 각 커미트를 접목하십시오. 스테이징은 이제 스테이징 사본이어야합니다. 마지막으로, 첫 번째 커밋을 제거하여 stiging을 제거하십시오.

hg update {SHA-1 of the ancestor changeset}
hg branch staging
hg graft {first changeset in stiging} ... {stiging head-1} {stiging head}
hg strip {first changeset in stiging}
hg push --new-branch

1
3 단계를 위해 다음을 사용할 수 있습니다hg graft {first changeset in stiging}..{stiging head}
KCD
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.