그래서 나는 Mercurial에서 바보 같은 실수를 계속합니다. 종종 “hg pull”과 “hg update”를하지 않고 작업을 시작합니다. 변경 사항을 적용하려고하면 오류가 발생합니다.
로컬 커밋 을 삭제 하여 여러 헤드, 분기 등을 생성하지 않도록 할 수 있는 방법이 있습니까? 로컬 커밋을 삭제하고 변경 사항을 팁과 병합 한 다음 다시 커밋하려고합니다. 간단하게 들리나요? 로컬 커밋 을 쉽게 삭제하는 방법을 찾지 못해 팁과 깔끔하게 병합 할 수 있습니다.
다시 한 번, “hg ci”로 만든 로컬 커밋 만 삭제하려고합니다. 파일 수정, 되돌리기 등을 원하지 않습니다.
답변
” strip “확장자를 활성화하고 다음을 입력하십시오.
hg strip #changeset# --keep
#changeset#
제거하려는 변경 세트의 해시는 어디에 있습니까 ? 이것은이 변경 집합 것을 제거 를 포함하여 그것에서 내려 체인지 와의 손길이 닿지 않은 작업 디렉토리를 떠날 것이다 . 커밋 된 코드 변경 사항을 되돌리려면 --keep
옵션을 제거하십시오 .
자세한 내용은 Strip Extension을 확인하십시오 .
“unown command ‘strip'”이 표시되면 활성화해야합니다. 그렇게하려면 .hgrc
또는 Mercurial.ini
파일을 찾아서 다음을 추가하십시오.
[extensions]
strip =
(머리말에서 언급 한 Juozas와 같이) 머리가 여러 개인 것은 Mercurial의 일반적인 작업 과정입니다. 스트립 명령을 사용하여 싸우지 말아야합니다. 대신 머리를 들어오는 머리와 병합하고 충돌을 해결하고 테스트 한 다음 밀어야합니다.
이 strip
명령은 분기를 오염시키는 변경 세트를 실제로 제거하려고 할 때 유용합니다. 당신이 있다면 사실, 이 질문 의 상황과 당신이 원하는 완전히 모든 “초안”변경 세트를 제거 영구적으로 체크 아웃 상단의 대답은 기본적으로 일을 제안한다 :
hg strip 'roots(outgoing())'
답변
Hg Tortoise를 사용하는 경우 확장 ” strip “을 활성화하십시오 .
- 파일 / 설정 / 확장 /
- 스트립 선택
그런 다음 스트라이핑을 시작하려는 위치에서 아래 버전을 선택하고 다음을 선택하여 right click
선택하십시오.
- 기록 수정
- 조각
이처럼 :
이 예에서는 19 번째 개정에서 마지막으로 커밋 된 개정 (22)까지 지 웁니다.
답변
최신 답변 (Mercural 2.1 이후에만 해당) :
단계를 사용 하고 공유하지 않으려는 개정을 비밀 (개인)로 표시하십시오. 그렇게하면 푸시되지 않습니다.
TortoiseHG에서 커밋을 마우스 오른쪽 버튼으로 클릭하여 단계를 변경할 수 있습니다.
또한 : 확장 “rebase”를 사용하여 로컬 커밋을 끌어온 후 공유 저장소의 헤드로 이동할 수도 있습니다.
답변
다른 사람들이 지적했듯이 머리를 잡아 당긴 다음 병합해야하지만 EditingHistory 도구 없이 커밋을 제거 하려면 hg clone -r
해당 변경 사항을 제외한 모든 변경 사항을 얻을 수 있습니다 .
원본 리포지토리에서 삭제되지는 않지만 새로운 복제본을 생성합니다. 그런 다음 수정 한 리포지토리를 삭제할 수 있습니다 (원하는 경우).
답변
나는이 문제를 만났다. 2 commit
를 만들고 두 커밋을 모두 롤백하고 삭제하고 싶었습니다.
$ hg rollback
그러나 hg rollback
두 커밋이 아닌 마지막 커밋으로 롤백합니다. 그 당시 나는 이것을 깨닫지 못했고 코드를 변경했습니다.
내가 hg rollback
한 커밋을 롤백 했을 때 사용할 수 있음을 알았습니다 hg strip #changeset#
. 그래서 나는 hg log -l 10
최근 10 개의 커밋을 찾고 내가 원하는 올바른 변경 세트를 얻었습니다 strip
.
$ hg log -l 10
changeset: 2499:81a7a8f7a5cd
branch: component_engine
tag: tip
user: myname<myname@email.com>
date: Fri Aug 14 12:22:02 2015 +0800
summary: get runs from sandbox
changeset: 2498:9e3e1de76127
branch: component_engine
user: other_user_name<name@email.com>
date: Mon Aug 03 09:50:18 2015 +0800
summary: Set current destination to a copy incoming exchange
......
$ hg strip 2499
abort: local changes found
무슨 abort: local changes found
뜻입니까? hg
아직 커밋되지 않은 코드에서 변경된 것을 발견 했음을 의미합니다 . 그래서,이 문제를 해결하려면 다음을 수행해야 hg diff
당신이 변경 한 코드 저장 hg revert
및 hg strip #changeset#
. 이처럼 :
$ hg diff > /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff
$ hg revert file_you_have_changed
$ hg strip #changeset#
위의 작업을 수행 한 후 patch
diff 파일을 사용하여 코드를 프로젝트에 다시 추가 할 수 있습니다.
$ patch -p1 < /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff
답변
Rebase 확장을 사용 하면이 문제를 훨씬 쉽게 해결할 수 있습니다. 사용 hg pull --rebase
하면 커밋이 풀링 된 개정판에 자동으로 다시 커밋되어 분기 문제를 피할 수 있습니다.