[svn] SVN 커밋을 되돌리려면 어떻게해야합니까?

SVN 커밋을 되 돌리는 방법에 대한 다양한 예를 찾았습니다.

svn merge -r [current_version]:[previous_version] [repository_url]

또는

svn merge -c -[R] .

그러나 둘 다 작동하지 않는 것 같습니다. 나는 그 명령을 시도하고 수동으로 변경된 파일을 확인했습니다.

개정 번호가 1944 인 커밋을 되돌리려면 어떻게해야합니까? 실제 파일을 보지 않고 되돌리기가 완료되었는지 확인하려면 어떻게해야합니까?



답변

두 예제 모두 작동해야하지만

svn merge -r UPREV:LOWREV . 범위 취소

svn merge -c -REV . 단일 개정 실행 취소

이 구문에서-현재 디렉토리가 WC이고 모든 병합 후에 수행 해야하는 것처럼 결과를 커밋합니다.

로그를 보시겠습니까?


답변

TortoiseSVN 클라이언트를 사용하는 경우 로그 표시 대화 상자를 통해 쉽게 수행 할 수 있습니다 .


답변

svn merge -r 1944:1943 .작업 사본에서 r1944의 변경 사항을 되돌려 야합니다. 그런 다음 diff를 사용하여 작업 복사본의 변경 사항을 검토 할 수 있지만 되돌리기를 저장소에 적용하려면 커밋해야합니다.


답변

먼저 작업 복사본을 1943으로 되돌립니다.

> svn merge -c -1943 .

둘째, 커밋 대상을 확인하십시오.

> svn status

셋째, 버전 1945를 커밋합니다.

> svn commit -m "Fix bad commit."

넷째, 새 로그를보십시오.

> svn log -l 4

------------------------------------------------------------------------
1945 | myname | 2015-04-20 19:20:51 -0700 (Mon, 20 Apr 2015) | 1 line

Fix bad commit.
------------------------------------------------------------------------
1944 | myname | 2015-04-20 19:09:58 -0700 (Mon, 20 Apr 2015) | 1 line

This is the bad commit that I made.
------------------------------------------------------------------------
1943 | myname | 2015-04-20 18:36:45 -0700 (Mon, 20 Apr 2015) | 1 line

This was a good commit.
------------------------------------------------------------------------


답변

개정을 “커밋 해제”하는 것은 불가능하지만 작업 복사본을 버전 1943으로 되돌리고이를 버전 1945로 커밋 할 수 있습니다. 버전 1943과 1945는 동일하며 변경 사항을 효과적으로 되돌립니다.


답변

다음과 같이 드라이 런을 수행합니다. HEAD는 현재 버전이고 PREV는 이전 버전이며 파일 경로 또는 커밋 된 항목은 다음과 같습니다.

svn merge --dry-run -rHEAD:PREV https://example.com/svn/myproject/trunk

드라 이런이 양호 해 보이면 –dry-run없이 명령을 실행하십시오.

개정 변경 사항을 확인한 후 다시 커밋하십시오. 버전 번호를 찾으려면 다음을 시도하십시오.

svn log


답변

F=code.c
REV=123
svn diff -c $REV $F | patch -R -p0 \
    && svn commit -m "undid rev $REV" $F