[svn] 파일의 이전 SVN 개정으로 되 돌리는 더 좋은 방법은 무엇입니까?

실수로 너무 많은 파일을 SVN 저장소에 커밋하고 의도하지 않은 것을 변경했습니다. (한숨) 그들을 이전 상태로 되돌리려면, 내가 생각해 낼 수있는 최선은

svn rm l3toks.dtx
svn copy -r 854 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx

이봐! 더 좋은 방법이 없습니까? 왜 이런 식으로 쓸 수 없습니까?

svn revert -r 854 l3toks.dtx

좋아, 나는 v1.4.4 만 사용하고 있지만 1.5 분기의 변경 사항 목록을 훑어 보았고 이것과 직접 관련된 것을 볼 수 없었습니다. 내가 놓친 것이 있습니까?


편집 : 나는 충분히 명확하지 않은 것 같아요. 나는 내가하는 변경 잃을 것이기 때문에 내가 병합을 반대 할 생각하지 않았다 만들고 싶어를! 라고 fileA하고는 fileB모두 수정 된하지만 난 단지 커밋하고 싶었다 fileA; 실수로 입력

svn commit -m "small change"

두 파일을 모두 커밋하고 이제 롤백하고 싶습니다 fileB. 리버스 병합을 사용하면 위에서 설명한 단계보다이 작업을 쉽게 알 수 있습니다.



답변

svn merge -r 854:853 l3toks.dtx

또는

svn merge -c -854 l3toks.dtx

두 명령 은 동일 합니다.


답변

svn 책 의 ” 변경 취소 “섹션을 확인하십시오.


답변

이전에 주어진 답변을 반복하여 약간의 공간을 사용하는 것은 죄송합니다. 그러나 이것은 항상 문제가됩니다.

로컬 파일을 최신 개정판 인 854로 업데이트했다고 가정 해 보겠습니다. 그런 다음 이전 개정판 (몇몇 이전의 파일 버전, 개정판 851)을 원합니다.

복사가 작동합니다 :

svn copy -r 851 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx

.. 그러나 repo URL에 대한 grepping 수 없습니다 🙂

업데이트가 작동하는 것 같습니다.

svn up -r 851 ./l3toks.dtx

…하지만 로컬 사본을 “새로 체크 아웃 한”또는 “온라인 개정과 동일”으로 표시합니다 (예 : Tortoise / RabbitVCS에서 녹색 확인 표시가 나타남) svn ci -m "rolled back to r 851". subversion실행 파일은 로컬 변경 사항을 알지 못하며 온라인 저장소에 아무것도 업로드하지 않아도됩니다.

이미 대답했듯이 리버스 병합은 작동하지만이 경우 바로 가기 구문에 의존해서는 안됩니다. 그러나 구체적으로 말하면 :

svn merge -r HEAD:851 l3toks.dtx
--- Reverse-merging r854 through r852 into 'l3toks.dtx':
U    l3toks.dtx

나는 인정해야한다-나는 문장을 이해하지 못할 것이다. ” r854를 통해 r854를 파일로 병합 ” “의미 만이 파일의 r851을 가지고, 당신은 이전에 로컬 가졌던 덮어 쓰기 – 그리고 그것은 최신 온라인 버전과 다른 것으로 표시되기 때문에, 온라인에서 새로운 ‘롤백’개정판으로 다시 확인할 수 있지만 다음과 같이 생각합니다. 🙂

이 후, 우리는 사용할 수 있습니다 svn diff 로컬로 올바른 개정판을 가져 오면 빠른 확인을 위해 . 또한 파일은 Tortoise / RabbitVCS에 빨간색 느낌표 (즉, 최신 커밋 된 버전과 다른)로 표시되므로 svn ci -m "rolled back to r 851"이번에는 실행할 수 있습니다.

또한 리버스 병합 후 마지막으로 마음이 바뀌면 ( 즉, 어쨌든 최신 HEAD 개정판을 계속 사용하고 싶다면 854-로컬로 851로 롤백했지만 아직 롤백을 커밋하지 않은 후) )를 사용하면 안됩니다 svn up. 왜냐하면 이미 ” 개정 854에서 “에 . 대신 svn revert --recursive .또는 유사한 것을 사용하십시오 …

건배!

참조 : Subversion을 사용하여 변경 사항을 롤백하는 방법-Jacob Wright – Flex, AIR, PHP 등

편집 : … 그리고 분명히와 동일한 효과를 svn merge -r HEAD:851 l3toks.dtx얻을 수 있습니다 :

svn export -r 851 l3toks.dtx
A    l3toks.dtx
Export complete.


답변

나는 최근에 오래된 빌드를 디버깅하기 위해 특정 개정으로 되돌려 야했고 이것은 마술처럼 작동했습니다.

svn up -r 3340 (or what ever your desired revision number)

로컬 변경에 신경 쓰지 않았기 때문에 “tc”옵션을 사용하여 모든 충돌을 해결해야했습니다 (복귀하기 전에 내가 돌보는 모든 것을 확인했습니다)

헤드 리비전으로 돌아가는 것도 간단했습니다.

svn up


답변

찾고있는 것을 “역 병합”이라고합니다. SVN 서적의 병합 기능에 대한 문서를 참조해야합니다 (luapyad 또는 해당 게시물의 첫 번째 주석 작성자가 지적합니다). Tortoise를 사용하는 경우 로그보기로 이동하여 마우스 오른쪽 단추를 클릭 한 후 실수 한 부분에서 “이 개정판의 변경 사항 되돌리기”를 선택할 수도 있습니다.


답변

리버스 병합은 정확히 원하는 것입니다 (luapyad의 답변 참조). 전체 디렉토리 대신 잘못 커밋 된 파일에 병합을 적용하십시오.


답변

마지막 체크인 만 취소하려면 다음을 사용할 수 있습니다.

svn merge -r head:prev l3toks.dtx

그렇게하면 현재 버전 번호와 이전 버전 번호를 찾을 필요가 없습니다.