머큐리얼 실행 취소 마지막 커밋


125

Mercurial에서 실수로 커밋 된 (변경되지 않은) 변경을 어떻게 취소 할 수 있습니까?

가능하면 TortoiseHg를 사용하는 것이 좋습니다.

최신 정보

구체적인 경우에는 변경 세트를 푸시하지 않았습니다. 그런 다음 서버에서 가져 와서 업데이트했습니다. 이 새로운 업데이트를 통해 마지막 커밋이 더 이상 사용되지 않으며 동기화하고 싶지 않다고 결정했습니다. 그래서 그것은 hg rollback내가 찾고있는 것이 아닌 것 같습니다 . 내 커밋 대신 풀을 롤백하기 때문입니다.


1
두 개 hg rollback를 만든 다음 다시 당기는 것은 어떻습니까?
VonC

1
첫 번째 롤백은 풀을 취소하고 두 번째 롤백은 "사용 가능한 롤백 정보가 없음"을 알려줍니다.
Martin Buberl

1
나는 같은 상황을 겪었고 일단 다른 작업을 한 후에는 다시 돌아가거나 기록에서 제거 할 수 없다는 것을 알고 있습니다. hg 저장소를 다시 복제해야합니다.

3
strip --keep: stackoverflow.com/questions/29413851/… 는 MQ qimport와 마찬가지로 태스크를 직접 해결합니다. 또는, 더 간단히 할 수 rebase로컬 변경 사항이있는 경우 시나리오 유지하고 충돌이 없습니다. (병합을 사용하여 두 그래프에서 원하는 그래프 끝 목표 일 때, 특히 빨리 진행되지 않는 경우 변경 사항 을 유지 하십시오 .) 여전히 '이력을 유지하는'분기를 닫는 것만으로도 유효 할 수 있습니다. 원하는 최종 상태에 따라 병합과 다릅니다.
user2864740

2
@ user2864740이 말한 것처럼 hg strip --keep명령이 사용하지만 다음과 같이 수정본을 제공해야합니다 hg strip --keep -r .. 이 답변은 잘 설명합니다 stackoverflow.com/a/19064016/1286571
ForeverWintr

답변:


77

한 가지 방법은 hg rollback (2013 년 8 월 Hg2.7부터 사용 중단)

마지막 커밋에서 실수를 수정 하는 hg commit --amend대신 사용하십시오 rollback.

저장소에서 마지막 트랜잭션을 롤백하십시오.

커밋 또는 병합 할 때 Mercurial은 변경 세트 항목을 마지막에 추가합니다 .
Mercurial은 터치 한 각 파일 이름과 트랜잭션 이전 길이의 트랜잭션 로그를 유지합니다. 중단되면 각 파일을 이전 길이로 절단합니다. 이 단순성은 revlogs를 추가 전용 으로 만드는 이점 중 하나 입니다. 트랜잭션 저널은 실행 취소 조작도 허용합니다.

TortoiseHg 복구 섹션을 참조하십시오 .

대체 텍스트

이 스레드는 또한 차이 사이의 자세한 사항 hg rollbackhg strip:
(쓴 마틴 가이슬러 또한 SO에 기여)

  • ' hg rollback'는 마지막 거래를 제거합니다. 트랜잭션은 데이터베이스에서 종종 발견되는 개념입니다. Mercurial에서는 commit, push, pull과 같은 특정 작업이 실행될 때 트랜잭션을 시작합니다
    . 작업이 성공적으로 완료되면 트랜잭션이 완료된 것으로 표시됩니다. 오류가 발생하면 트랜잭션이 "롤백"되고 리포지토리는 이전과 동일한 상태로 유지됩니다.
    'hg rollback'을 사용하여 롤백을 수동으로 트리거 할 수 있습니다. 마지막 트랜잭션 명령이 취소됩니다. pull 명령이 10 개의 새로운 변경 세트를 다른 브랜치의 저장소로 가져 오면 ' hg rollback'가 모든 변경 세트를 제거합니다. 참고 : 트랜잭션을 롤백 할 때 백업없습니다 !

  • ' hg strip'는 변경 집합과 모든 하위 항목을 제거합니다. 변경 세트는 번들로 저장되므로 다시 필요할 경우 다시 적용 할 수 있습니다.

ForeverWintr 은 의견에서 제안합니다 (2016 년, 5 년 후)

먼저 파일을 잊어 버려서 '커밋 해제'할 수 hg forget filea; hg commit --amend있지만 , 예를 들어 직관적이지 않은 것 같습니다.
hg strip --keep아마도 현대 hg에 대한 더 나은 솔루션 일 것입니다.


올바른 롤백이 마지막 트랜잭션을 제거한다는 것을 이해하면. 제 경우에는 커밋을 한 다음 서버에서 가져 왔습니다. 그렇다면 커밋 대신 풀을 롤백한다는 의미입니까?
Martin Buberl

1
@Martin Buberl은 :에 따르면 selenic.com/mercurial/hg.1.html#rollback , 풀은 거래로 간주됩니다. 따라서 잡아 당기면 hg rollback커밋 대신 끌어 오기가 실행 취소됩니다.
Tim Henigan 2012 년

2
어떻게 hg commit --amend작동 해야하는지 잘 모르겠지만 커밋 메시지를 수정하고 포함 된 파일을 변경하는 방법은 없습니다. 저장하지 않고 편집기를 종료하고 변경 한 모든 파일 을 포함하도록 내 잘못 커밋이 변경된 것을 발견했습니다 !
Tim Tisdall

2
를 사용하여 질문에 대한 답변을 얻는 방법은 분명하지 않습니다 hg commit --amend. 먼저하여 파일을 '유엔 - 저지'할 수 있습니다 hg forget예를 들어 팅 그, : hg forget filea; hg commit --amend,하지만 직관적 보인다. hg strip --keep 은 아마도 현대 hg를위한 더 나은 솔루션 일 것입니다.
ForeverWintr

1
@JasonS book.mercurial-scm.org/read/… 는 좋은 읽기이지만, 경우에 따라 hg 재설정을 고려할 수도 있습니다. stackoverflow.com/a/31302998/6309
VonC

46

hg strip 리포지토리에서 개정판 및 모든 하위 항목을 완전히 제거합니다.

strip을 사용하려면 .hgrc (또는 mercurial.ini)에 다음 줄을 추가하여 MqExtension 을 설치해야합니다 .

[extensions]
mq =

TortoiseHg에서 스트립 명령은 워크 벤치에서 사용할 수 있습니다. 개정을 마우스 오른쪽 버튼으로 클릭하고 '이력 수정'-> '스트립'을 선택하십시오.

strip저장소의 히스토리를 변경 하므로 아직 다른 사용자와 공유하지 않은 개정판에서만 사용해야합니다. 수은 2.1 이상을 사용하는 경우 단계 를 사용하여이 정보를 추적 할 수 있습니다 . 커밋이 아직 초안 단계에있는 경우 다른 리포지토리와 공유되지 않았으므로 안전하게 제거 할 수 있습니다. (이 점을 지적한 Zasurus에게 감사한다).


2
문제의 개정판이 여전히 초안 문구에 있거나 (또는 ​​귀하가 모든 리포지토리에 푸시 / 풀링되어 스트립을 적용한 리포지토리에 액세스 할 수있는 경우) (이 설명의 경우) 가장 깨끗하고 깨끗한 옵션.
GazB

4
TortoiseHg를 설치 한 경우 mq를 전체적으로 활성화하기위한 그래픽 인터페이스가 있습니다. 현재 버전에서 : "파일-> 설정-> 글로벌 설정 탭-> 확장명-> mq"를 활성화하거나 "파일 편집"버튼을 통해 설정 파일에 액세스하십시오.
David

19

롤백 할 수 없으므로 해당 커밋을 끌어 올 때 얻은 새 헤드에 병합해야합니다. 당신이 한 일을 원하지 않는다면 이 팁 을 사용하여 쉽게 할 수 있습니다 .

따라서 머리 를 당겨서 업데이트 하면 다음과 같이 할 수 있습니다.

hg --config ui.merge=internal:local merge

현재 체크 아웃 된 개정판의 모든 변경 사항을 유지하고 체크 아웃되지 않은 개정판 (더 이상 원하지 않는 것으로 작성된 개정판)의 변경 사항은 유지하지 않습니다.

이것은 역사를 정확하고 완전하게 유지하기 때문에 좋은 방법입니다. 2 년 후 누군가가 당신이 끌어 낸 것에 버그를 발견하면, 당신은 (사용하지 않았지만 저장 한) 같은 구현을보고 "오, 내가 옳았다"고 할 수 있습니다. :)


5

hg rollback 당신이 원하는 것입니다.

TortoiseHg hg rollback에서 커밋 대화 상자에서 수행됩니다. 커밋 대화 상자를 열고 "실행 취소"를 선택하십시오.

대체 텍스트


1
커밋 한 다음 끌어 오기 및 업데이트 / 동기화를했습니다. 이 새로운 변경 사항으로 마지막 커밋이 더 이상 사용되지 않고 실행 취소하고 싶다고 결정했습니다. 내 경우 TortoiseHg의 실행 취소 버튼이 비활성화되어 있습니다.
Martin Buberl

롤백이 더 이상 사용되지 않습니다.
UpTheCreek

Tortoise HG의 현재 버전에서는 리포지토리 메뉴 항목에서 롤백 / 실행 취소 옵션으로 이동할 수 있습니다.
daveywc

@UpTheCreek 인용이 필요했습니다.
DanMan

@ DanMan-그가 제공 한 링크를 확인하십시오.
UpTheCreek

3

TortoiseHg Workbench 4.4.1 (07.2018)의 현재 버전에서는 Repository- 를 사용할 수 있습니다 Rollback/undo....
여기에 이미지 설명을 입력하십시오


1

해결 방법.

서버로 푸시하지 않으면 리포지토리 폴더에서 새 폴더로 복제하거나 다른 폴더로 씻어 내고 (모든 파일 삭제) 새 폴더로 복제합니다.


0

작업 공간을 가져 와서 업데이트 한 후 제거하고 변경하려는 변경 세트를 마우스 오른쪽 버튼으로 클릭 한 다음 수정 내역-> 스트립을 클릭하면 변경 세트가 제거되고 기본 팁을 가리 킵니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.