2011-02-03 7 views
13

버전 제어에 TortoiseHg을 사용하고 있습니다. 나는 지역에 커밋 한 후 원격 저장소로 밀었다. 특정 커밋 시점으로 되돌리려면 어떻게합니까?Mercurial 푸시 실행 취소

세 가지 다른 푸시가 있었고 첫 번째 푸시로 되돌리려합니다. hg 롤백hg undo 명령에 대해 읽었지만이를 수행하는 방법을 잘 모르겠습니다.

+0

건초는 자르고 건조되어 가축을위한 먹이로 사용되는 긴 풀입니다. :-) –

+1

이 기사 외에도 유용한 "[Finding And Fixing Mistakes] (http://hgbook.red-bean.com/read/finding-and-fixing-mistakes.html)"입니다. –

답변

14

다른 저장소로 푸시 했으므로 변경 사항이 전파 된 위치를 알 수 없습니다. 푸시하지 않았다면 실행 취소를 수행 할 수 있지만 실행 취소는 마지막 트랜잭션 만 수행합니다.

히스토리를 실제로 수정하는 또 다른 옵션은 스트립 명령이지만 다시 누르면 밀어 넣었 기 때문에 이것은 옵션이 아닙니다. 당신이 당신의 지역을 벗긴다면, 다음에 당신이 뽑을 때 체인지 세트를 되 찾을 수 있습니다.

중앙에 액세스 할 수 있으면 제거 할 수 있지만 다른 누군가가 이미 변경 사항을 가져온 경우 다음에 푸시 할 때 다시 중앙에 다시 나타납니다.

현재 유일한 안전한 옵션은 백 아웃 명령입니다. 이것은 기본적으로 실수로 넣은 변경 집합을 뒤집는 새로운 변경 집합을 만듭니다.

2

hginit.com's 'fixing goofs' page을 읽고 싶을 수도 있습니다. 당신은 "back out"하고, 병합하고, 밀어 넣기를 원합니다. 이것이 실제로하는 일은 변화의 반대를 수행하고 그것을 적용하는 새로운 커밋을 만드는 것입니다.

14

"순수한"Mercurial 관점에서 볼 때, 마이크는 오른쪽으로 밀린 변경 집합이 사용자의 통제에서 벗어났습니다. 그러나 실제로는 너무 엄격한 관점 인입니다.

Mike가 말한 것과는 반대로, 이미 변경된 푸시 설정을 제거하면 일 수 있습니다.을 옵션으로 사용할 수 있습니다. 중앙 저장소를 제어 할 수 있는지 여부와 팀/커뮤니티의 규모 및 구성 방법에 따라 다릅니다.

아무도 당신의 나쁜 changesets을 당기지 않았다는 것을 아는 경우에, 다만 당신의 국부적으로 및 중앙 repo 완료하십시오, 역사는 삭제했다.

누군가가 당신의 나쁜 체인지 세트를 이미 잡았을 경우, 로컬 및 중앙 repo도 제거해야합니다. 로컬 리포지토리에서 잘못된 변경 세트를 제거하도록 모든 푸싱 팀 멤버에게 통지해야합니다 너무 (또는 박탈 중앙 repo에서 reclone). 네가 운이 좋다면 모두가 네가하는 말을한다. 그렇지 않으면 변경 집합이 조만간 중앙 저장소에 다시 저장됩니다.

결론은 스트리핑이 비용 (팀 부담과 추가 작업 부담)과 이점 (클린 내역)의 균형을 맞추어야한다는 것입니다.


실수로 큰 바이너리 파일을 추가 한 경우 이점이 비용보다 중요한 실질적인 예가됩니다. 이 경우 아마 모든 팀 구성원은 폭파 된 저장소로 작업하는 대신 동 기적으로 제거하려고합니다.


UPDATE : 당신은 중앙 저장소로 돌아 가지에서 제거 변경 집합을 방지하기 위해 서버 측 후크를 사용할 수 있습니다 - read more here.

+0

네 말이 맞아, 나는이 일에 대해 아주 '순진한 자세'를 취했다. 그것은 정리가 가능하며, 당신의 예는 당신이 확실히 노력을 투자하고, 후속 조치가 필요한 곳에서 훌륭한 곳입니다. – Mikezx6r