방금 작동하지 않은 커밋이 있으므로 history에서 삭제하지 않고 버리고 싶습니다 .
이전 개정판에서 업데이트하여 커밋하여 새로운 헤드를 만들었습니다.
나는 가지가없고, 가지를 원하지 않습니다. 단지 새 머리를 그대로 그대로, 공상, 합병, 걱정하지 않고 그냥 이전 머리를 잊어 버리고 싶습니다.
나는 그것을하는 방법을 찾지 못하는 것 같아서 할 수 없다는 것을 믿기 시작했습니다. 내가 찾은 것은 가지에 관한 것, 또는 병합에 관한 것입니다.
방금 작동하지 않은 커밋이 있으므로 history에서 삭제하지 않고 버리고 싶습니다 .
이전 개정판에서 업데이트하여 커밋하여 새로운 헤드를 만들었습니다.
나는 가지가없고, 가지를 원하지 않습니다. 단지 새 머리를 그대로 그대로, 공상, 합병, 걱정하지 않고 그냥 이전 머리를 잊어 버리고 싶습니다.
나는 그것을하는 방법을 찾지 못하는 것 같아서 할 수 없다는 것을 믿기 시작했습니다. 내가 찾은 것은 가지에 관한 것, 또는 병합에 관한 것입니다.
답변:
잊고 자하는 개정으로 리포지토리를 헤드로 업데이트 한 다음 hg commit --close-branch(익명) 브랜치를 닫힌 것으로 표시하는 데 사용하십시오 . 그런 다음 그 지점의 머리로 업데이트 할 원하고 작업을 계속합니다.
-c옵션을 사용하면 닫힌 분기를 볼 수 hg heads있지만 기본적으로 표시 hg merge되지 않으며 닫힌 헤드와 병합을 시도하지 않습니다.
당신은 사용해야합니다 hg push --force당신이 누를 때 당신이 실제로 원격 저장소에 추가 머리를 만들 수 있기 때문에 다른 저장소에이 폐쇄 머리를 밀어 처음. 따라서 Mercurial에게 이것으로 괜찮다고 말하십시오 --force. 닫힌 머리를 당기는 사람들은 경고로 귀찮게하지 않습니다.
hg heads수은 1.4.3을 사용하고 있습니다. 이것이 새로운 기능입니까?
hg branches현재 사용중인 지점 이름을 표시해야합니다. 지점을 닫으려고하지 않고 익명 지점을 원래 지점으로 다시 병합하여 모든 변경 사항을 삭제하십시오.
이 단계에서 브랜치로 작업 하고 싶지 않다는 것을 알고 있지만 이것이 바로 당신이 한 일입니다. 이전 버전으로 돌아가서 작동하는 무언가를 커밋하면 이름이없는 분기가 만들어 지지만 분기는 모두 동일합니다.
머리를 여러 개 갖는 것에 대해 걱정하지 않고 그대로 유지하는 데 아무런 문제가 없지만 물건을 정리하고 싶다면 실수로 잘못된 머리를 한 번 선택하지 않으면 이전 지점을 죽일 수 있습니다.
Mercurial 문서에는 가지 치기 데드 브랜치 (Pruning Dead Branches) 와 관련된 여러 옵션을 안내하는 좋은 섹션이 있습니다 .
가장 좋은 방법은 오래된 지점을 "닫은"것으로 표시하는 것입니다. 이전 헤드가 "123"개정판 인 경우 :
hg update -r 123
hg commit --close-branch -m 'Closing old branch'
hg update -C default
-C에서 hg update? 파일이 수정되지 않은 것으로 보이므로 파일이 없으면 작동합니다.
hg heads
changeset: 223:d1c3deae6297
user: Your name <your@email.com>
date: Mon Jun 09 02:24:23 2014 +0200
summary: commit description #3
changeset: 123:91c5402959z3
user: Your name <your@email.com>
date: Sat Dec 23 16:05:38 2013 +0200
summary: commit description #2
changeset: 59:81b9804156a8
user: Your name <your@email.com>
date: Sat Sep 14 13:14:40 2013 +0200
summary: commit description #1
그런 다음 다음과 같이하십시오.
hg up -r 59
hg ci --close-branch -m "clean up heads; approach abandoned"
hg up -r 123
hg ci --close-branch -m "clean up heads; approach abandoned"
hg push
hg up -r 223
그리고 당신은 끝났습니다.
--close-branch -m "Closing branch - technique #2 abandoned in favor of technique #3".
hg up -r 223변경하기 전에 원할 것 입니다.
hg push --force것이 아닙니다 hg push.
hg push자체로는 저에게 효과가 없었습니다. 여러 헤드로 인해 거부되는 경우 외부 리포지토리로 변경 사항을 적용하는 것이 좋습니다.
사용하고 싶습니다 hg backout. 이렇게하면 변경 세트에서 변경 한 사항이 모든 하위 변경 세트에서 제거됩니다.
좋은 설명을 위해 이것을 확인하십시오. 머큐리얼 백 아웃
Niall과 Nick의 대답은 모두 직설적입니다. 매달린 머리를 많이 만들었으므로 머리를 더 쉽게 닫을 수 있도록 별칭을 작성했습니다. 이것을 당신의 .hgrc:
[alias]
behead = !REV=$($HG id -i); $HG update $@ -q && $HG ci --close-branch -m "Closing dead head" && $HG update $REV -q
(이미 [alias]섹션이 있다면 대신 추가 할 수 있습니다)
이제 다음과 같이 하나의 단일 명령으로 헤드를 닫을 수 있습니다 (다른 변경 세트로 수동으로 업데이트하지 않아도 됨).
$ hg behead 123
참고 : 별명은 Mercurial 별명이 쉘 명령 일 수 있다는 사실을 이용 합니다 . 이것은 아마도 Windows가 아닌 UNIX에서만 작동한다는 것을 의미합니다.
원치 않는 분기를 닫거나 제거하는 대안 은 효과를 완전히 버리는 방식으로 병합 하지만 히스토리에는 남겨 두는 것입니다. 이 접근 방식은 원치 않는 변경 사항이 푸시로 전파되도록 허용하므로 의도 된 효과 인 경우에만 사용하십시오.
변경 세트 이력이 다음과 같다고 가정 해 봅시다.
1-2-3-4-5-6
\
7-8-*
그것은이다 5과 6더 이상 어떤 싶어하지 않습니다.
당신은 이것을 할 수 있습니다 :
hg up 8
hg merge -r 6 -t :local
hg commit ...
이것은 이것을 만들 것입니다 :
1-2-3-4-5-6
\ \
7-8-9-*
업데이트를 8통해 원하는 히스토리 헤드에서 작업 할 수 있습니다.
-t :local에 지시라는 병합 "도구"를 사용 HG 지역 즉, 다른 지점에서 변경, 현재 작업 폴더 상태로 표현하지 사람을 무시한다는 뜻입니다. 더 많은 정보 .
따라서 원치 않는 변경 사항 5과 6기록은 유지되지만 최근에는 영향을 미치지 않습니다.
이것은 Evolve 확장 의 사용 사례입니다 . 현재 Mercurial과 함께 제공되지 않으므로 기술적으로 타사 확장입니다. 그러나 Mercurial 개발자를 포함하여 많은 사람들이 상당히 많이 사용하고 있으며 매우 적극적으로 개발되고 있으며 아무데도 가지 않습니다.
Evolve 확장을 사용하면 간단히
hg prune -r revname
그리고 당신의 인생을 계속합니다. cset은 여전히 존재하지만 더 이상 사용되지 않습니다. --hidden옵션을 Mercurial 명령에 전달하지 않으면 표시되지 않으며 기본적으로 원격 저장소로 푸시되지 않습니다. 당신이 정말로 원한다면 그것을 강요 할 수 있다고 생각하지만.
정리할 cset에 유지하려는 조상이 hg evolve있는 경우 해당 변경 세트를 리베이스 하기 위해 실행해야합니다 . hg evolve자동으로 수행됩니다. 그렇지 않으면 아무것도 할 필요가 없습니다.
원치 않는 머리를 복제하지 않고 손상된 저장소를 새 것으로 복제 할 수 있습니다. 그런 다음 이전 저장소를 제거하고 새로 작성된 복제본을 원래 위치로 이동 한 후 계속 작업하십시오. 시간이 다소 걸리지 만 원치 않는 개정의 표시없이 완벽하게 깨끗한 저장소를 얻을 수 있습니다.
hg clone --rev myGoodResition myDirtyRepo myCleanRepo
오류로 생성 된 헤드를 참수하고 싶을 때이 문제가 여러 번 발생했습니다. 나는 항상 그것이 지구의 얼굴에서 사라지는 것을보고 싶다.
지역 사본에서 최신 정보를 구한 후 다음을 수행하십시오.
벗길 머리의 시작 부분을 찾고 (새 목이 갈라지기 시작하는 곳) 개정 번호를 얻습니다.
벗겨
출처 : TipsAndTricks .
출처 : PruningDeadBranches # Using_strip .
hg --config extensions.hgext.mq= strip -n <rev>
이제 리포지토리에 머리가 벗겨 져야합니다. 제거는 중앙 저장소로 푸시 할 수있는 변경 사항을 작성하지 않으므로 마지막 단계는 중요합니다. 마지막 단계가 없으면 머리를 로컬에서 벗겨 낸 것뿐입니다.