Mercurial에서 실수로 커밋 된 (변경되지 않은) 변경을 어떻게 취소 할 수 있습니까?
가능하면 TortoiseHg를 사용하는 것이 좋습니다.
최신 정보
구체적인 경우에는 변경 세트를 푸시하지 않았습니다. 그런 다음 서버에서 가져 와서 업데이트했습니다. 이 새로운 업데이트를 통해 마지막 커밋이 더 이상 사용되지 않으며 동기화하고 싶지 않다고 결정했습니다. 그래서 그것은 hg rollback
내가 찾고있는 것이 아닌 것 같습니다 . 내 커밋 대신 풀을 롤백하기 때문입니다.
답변
한 가지 방법은 (2013 년 8 월 Hg2.7부터 사용 중단)hg rollback
마지막 커밋에서 실수를 수정 하는
hg commit --amend
대신 사용하십시오rollback
.저장소에서 마지막 트랜잭션을 롤백하십시오.
커밋 또는 병합 할 때 Mercurial은 변경 세트 항목을 마지막에 추가합니다 .
Mercurial은 터치 한 각 파일 이름과 트랜잭션 이전 길이의 트랜잭션 로그를 유지합니다. 중단되면 각 파일을 이전 길이로 절단합니다. 이 단순성은 revlogs를 추가 전용 으로 만드는 이점 중 하나 입니다. 트랜잭션 저널은 실행 취소 조작도 허용합니다.
TortoiseHg 복구 섹션을 참조하십시오 .
이 스레드는 또한 차이 사이의 자세한 사항 hg rollback
과 hg 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에 대한 더 나은 솔루션 일 것입니다.
답변
hg strip
리포지토리에서 개정판 및 모든 하위 항목을 완전히 제거합니다.
strip을 사용하려면 .hgrc (또는 mercurial.ini)에 다음 줄을 추가하여 MqExtension 을 설치해야합니다 .
[extensions]
mq =
TortoiseHg에서 스트립 명령은 워크 벤치에서 사용할 수 있습니다. 개정을 마우스 오른쪽 버튼으로 클릭하고 ‘이력 수정’-> ‘스트립’을 선택하십시오.
strip
저장소의 히스토리를 변경 하므로 아직 다른 사용자와 공유하지 않은 개정판에서만 사용해야합니다. 수은 2.1 이상을 사용하는 경우 단계 를 사용하여이 정보를 추적 할 수 있습니다 . 커밋이 아직 초안 단계에있는 경우 다른 리포지토리와 공유되지 않았으므로 안전하게 제거 할 수 있습니다. (이 점을 지적한 Zasurus에게 감사한다).
답변
롤백 할 수 없으므로 해당 커밋을 끌어 올 때 얻은 새 헤드에 병합해야합니다. 당신이 한 일을 원하지 않는다면 이 팁 을 사용하여 쉽게 할 수 있습니다 .
따라서 머리 를 당겨서 업데이트 하면 다음과 같이 할 수 있습니다.
hg --config ui.merge=internal:local merge
현재 체크 아웃 된 개정판의 모든 변경 사항을 유지하고 체크 아웃되지 않은 개정판 (더 이상 원하지 않는 것으로 작성된 개정판)의 변경 사항은 유지하지 않습니다.
이것은 역사를 정확하고 완전하게 유지하기 때문에 좋은 방법입니다. 2 년 후 누군가가 당신이 끌어 낸 것에 버그를 발견하면, 당신은 (사용하지 않았지만 저장 한) 같은 구현을보고 “오, 내가 옳았다”고 할 수 있습니다. 🙂