나는 Mercurial을 사용하고 있으며, 세 개의 머리로 인해 지역적으로 끔찍한 혼란에 빠졌습니다. 푸시 할 수 없으며 모든 로컬 변경 사항과 커밋을 삭제하고 완전히 깨끗한 코드와 깨끗한 기록으로 다시 시작하고 싶습니다.
즉, (a) 원격 브랜치의 팁에 존재하는 것과 정확히 동일한 코드를 로컬로 사용하고 (b) 로컬 커밋의 기록이없는 것으로 끝나고 싶습니다.
내가 알고 hg update -C
로컬 변경 사항을 덮어 씁니다. 하지만 로컬 커밋을 어떻게 삭제합니까?
분명히 말하면, 나는 내가 지역에서 한 일을 보존하는 데 관심이 없습니다. 나는 완전히 깨끗한 로컬 체크 아웃으로 되 돌리는 가장 간단한 방법을 원합니다.
답변
가장 간단한 방법 (new hg clone
)이 실용적이지 않을 때 다음을 사용합니다 hg strip
.
% hg outgoing -l 1
% hg strip $rev # replace $rev with the revision number from outgoing
hg outgoing
조용 해질 때까지 반복합니다 . hg strip $rev
삭제 $rev
및 모든 하위 항목에 유의하십시오 .
먼저 strip
Mercurial 설정에서 활성화 해야 할 수도 있습니다 .
추신 : 더 현명한 접근 방식은 revset 언어를 사용하는 것입니다.
% hg strip 'roots(outgoing())'
답변
원격 저장소에도있는 변경 세트 만 보존하는 로컬 복제본을 만들고 싶을 것입니다. 사용 TortoiseHg , hg log
또는 그림과 유사한은 개정의 어떤에서 당신이 최신 버전입니다 하지 않았다 만들기 (시작 엉망 전에 하나). 를 사용하면 hg outgoing
여기에서 도움이 될 수 있습니다. 모든 변경 세트가 나열됩니다. 이전 버전보다 먼저 수정 번호를 선택하십시오.
대상 개정이 호출 good
되고 복제본이 foo
이면 다음을 수행하십시오.
hg clone -r good foo foo-clean
이것은 빠른 로컬 작업이 될 것 입니다. 모든 것을 다시 다운로드 할 이유 가 없습니다 . foo-clean
복제는 개정까지 변경 집합이 포함됩니다 good
. 이제 대체 할 수 foo-clean/.hg/hgrc
와 foo/.hg/hgrc
같은 기본 푸시 / 풀 경로로 저장소 로컬 설정을 유지하기 위해.
당신이 만족하는 경우 foo-clean
당신이에서 필요로하는 모든 것을 갖추고 foo
, 단순히 삭제 foo
및 이름 변경 foo-clean
에 foo
. a는 마십시오 hg pull
당신의 클론으로 원격 저장소에서 새로운 변경 집합을 얻을 정상처럼 계속합니다.
아무도 새 변경 세트를 원격 저장소에 푸시하지 않은 경우 good
위와 같이 사용할 개정판을 결정하는 것은 매우 간단 hg id default
합니다. 원격 저장소에있는 팁의 ID를 알려줍니다.
답변
확인. 따라서 모든 로컬 항목, hg init
새 로컬 저장소 및 hg pull
최신 팁을 삭제하십시오 . hg update
이 후에 잊지 마세요 .
답변
당신은 사용할 수 있습니다
hg 스트립 개정
로컬 리포지토리의 모든 개정판과 하위 트리를 종료합니다.
https://www.mercurial-scm.org/wiki/Strip
그러나 이미 푸시 된 것에 사용하려고하지 마십시오.
답변
로컬 시스템에있는 모든 것을 삭제하고 원격 저장소를 다시 복제하십시오.
답변
hg strip`hg out --template "{rev} {author} \ n"| grep YOUR_AUTHOR_NAME | 잘라 내기 -d ""-f 1`
나를 위해 트릭을 수행합니다.
작성자 이름으로 생성 된 기본 저장소로 푸시되지 않은 모든 개정을 제거합니다.
이 스타일을 사용하여 기본 저장소가 아닌 다른 저장소를 확인하도록 할 수도 있습니다.
hg strip`hg out OTHER_REPO_ALIAS-템플릿 "{rev} {author} \ n"| grep YOUR_AUTHOR_NAME | 잘라 내기 -d ""-f 1`
답변
TortoiseHg를 사용하는 경우 (작은) 혼란에서 벗어나는 간단한 방법 중 하나는 먼저 최신 개정판으로 업데이트 한 다음 변경 집합을 선택하고 “로컬과 병합”을 시작하는 것입니다. 병합 대화 상자가 나타나면 작은 ‘+’아이콘을 클릭하여 몇 가지 추가 옵션을 표시합니다. 그 중 하나는 “병합 대상 (기타) 개정판에서 변경 집합 삭제”입니다. 이렇게하면 변경 세트가 여전히 리포지토리에 있고 푸시되지만 병합시 삭제되므로 아무 효과가 없습니다. 많은 헤드에 걸쳐있는 많은 변경 집합이있는 경우 이러한 방식으로 리포지토리를 오염시키고 싶지 않을 수 있지만 이는 간단한 수정이며 나중에 참조 할 수있는 데이터가 삭제하려는 변경 집합에 포함되어 있는지 고려할 가치가 있습니다.