Git & Github :: Reset & Revert

김병철·2022년 9월 10일
0

Git

목록 보기
7/7

버전 되돌리기

Git을 사용하여 버전을 되돌릴 때는 크게 두 가지 방법으로 나뉩니다.
Reset은 특정 시점(과거 버전)으로 돌아가는 것입니다.
Revert는 특정 시점(과거 버전)까지 내역을 거꾸로 실행하여 되돌리는 것입니다.

프로젝트 파일을 관리하는 .git폴더를 백업해둡니다.

Reset과 Revert의 차이

  • Reset은 돌아간 시점의 버전과 현재 시점 사이의 내역이 삭제되지만, Revert는 내역이 남습니다.
    협업 시 과거 내역을 삭제하면 문제가 될 수 있습니다.

  • git log로 내역을 볼 때 어떤 버전들이 기록되어 있는지 유심이 보시길 바랍니다.

1. Reset

1-1. 특정 버전 시점으로 reset

Reset 명령어는 다음과 같습니다.

git reset --hard "commit 일련번호(해시)"

위 그림의 일련번호를 명령어에 입력해주면 됩니다.
전체를 다 복사해서 넣어줘도 되고, 일부만 넣어줘도 됩니다.
(단, 다른 일련번호와 구분이 되어야 합니다.)

명령어를 입력하고 git log로 로그를 확인하면,
입력한 일련번호의 버전 이후로 내역이 삭제된 것을 확인할 수 있습니다.

소스트리에서도 마찬가지로 확인하실 수 있습니다.

1-2. 현시점 Git이 생각하는 최신 버전 확인

백업해둔 .git폴더를 다시 해당 프로젝트 경로에 복사한 뒤, 아래 명령어를 입력합니다.
앞서 입력한 명령어에서 일련번호없이 사용하면 됩니다.
뒤에 일련번호(커밋 해시)가 없으면 마지막 버전을 가리킵니다.

git reset --hard

현 시점 git이 생각하는 최신버전을 알려줍니다.
.git폴더의 내역과 일치한 버전일 것입니다.


VS Code의 기능입니다. Reset으로 삭제된 파일 제목에 위 그림과 같이 표시가 됩니다.


2. Revert

Revert는 Reset과 어떤 점이 다른지 알아보겠습니다.

2-1. revert로 특점 시점의 버전으로 되돌리기

다음 명령어로 과거의 특점 시점의 버전으로 되돌아 가 보겠습니다.

git revert "되돌릴 일련번호(커밋 해시)"

커밋 코멘트가 "Add George to Tigers"인 버전으로 revert했습니다.
그리고 git log로 확인했을 때 가장 최신 버전은 역시 "Add George to Tigers"입니다.
그리고 그 아래를 보면 다른 버전의 내역이 나오는데, reset과 다르게 이전에 내역이 삭제되지 않은 모습입니다.
"Add George to Tigers" 이후의 내역을 거꾸로 실행하게 된 것입니다.

2-2. revert로 되돌릴 경우 충돌

revert로 되돌릴 경우에 한 파일을 생성했고, 중간에 수정한 내역도 있습니다.
생성을 했으므로 되돌리려면 삭제를 해야 합니다.
수정을 했으므로 되돌리려면 수정한 내역을 거꾸로 수정해야 합니다.
여기서 충돌이 발생합니다.

이런 메세지와 함께 오류가 발생했습니다.
되돌리려면 삭제해야 할 파일이므로 저는 이 파일을 삭제하겠습니다.

삭제되었다는 `rm 'leopards.yaml' 메세지가 뜹니다.
그리곤 다음과 같이 revert를 계속해서 진행합니다.

git revert --continue

정상적으로 되돌려진 모습입니다.

소스트리에서도 확인이 됩니다.

만약, 되돌리는 경우에 추가로 변경을 하고 싶다면 어떻게 하면 될까요?

git revert --no-commit (되돌릴 커밋 해시)

이 경우에는 되돌린 후에 add까지만 된 상태입니다.
이후에 원하는 작업을 한 뒤에 함께 commit하면 됩니다.

그리고 만약 아직 커밋되지 않은 것들을 취소하고 싶다면, 다음 git reset --hard명령어를 사용합니다.

3. Sourcetree로 해보기

3-1. revert

원하는 버전을 우클릭 해서 커밋 되돌리기를 선택합니다.

를 눌러줍니다.

3-2. reset

원하는 버전을 우클릭해서 '이 커밋까지 현재 브랜치를 초기화`를 선택합니다.

여기서 Hard를 선택합니다.

References

profile
keep going on~

0개의 댓글