과거로 돌아가기

Organ·2023년 10월 29일
0

GIT

목록 보기
2/2

RESET 과 REVERT

RESET

말 그대로 시간을 과거로 되돌리는 것. 과거로 돌아간 이후 행적은 히스토리에서 지우는 방식.

REVERT

과거로 돌아간 이후 행적을 삭제하는 것이 아니라 이때의 변화를 거꾸로 수행하는 캡슐을 넣음으로써 결과적으로 이전과 같은 상태로 돌아가게 된다.
이렇게 하는 이유는
1. 이런 과정 하나하나도 기록으로 남길 필요가 있을 때 이 방식을 사용하고
2. 밑에서 실행했던 내용만 취소하고 싶은 경우에 사용한다.

한 번 공유공간에 올라간 내역을 RESET 해버리면 협업시 문제가 발생하게 되는데 그걸 기반으로 작업한 다른 사람들의 코드와 심각한 충돌을 일으키게 되기 때문이다. 그 때문에 한 번 공유가 된 코드들은 REVERT를 사용해서 되돌려 주는 것이 좋다.

RESET 과 REVERT 실습

reset 사용해서 과거로 돌아가기

reset을 할 때는 우리가 돌아가고 싶은 시점 즉 해시가 필요한데 git log 로 기록을 조회하고 우리가 돌아가고자 하는 시점을 찾아준다

commit 408afc1bb3dce9ea516de94d050f95633a44bc99
Author: Kang-Hyesung <hyesung9797@gmail.com>
Date:   Sun Oct 22 23:12:12 2023 +0900

    Add team Cheetas
  • 되돌아갈 시점: Add team Cheetas의 커밋 해시 복사
  • :q로 빠져나가기

이후 git reset --hard (돌아갈 커밋 해시) 작성해준다.

$ git reset --hard 408afc1bb3dce9
HEAD is now at 408afc1 Add team Cheetas

우리가 추가해주었던 panthers가 사라진 모습 확인 가능


이 처럼 파일 생성 변경 삭제 이 모든 것들이 다 과거로 돌아가 있는 것이다.

예제) 첫 커밋 시점으로 돌아가기

git log로 기록 조회

commit 95291f9a6e9ee8052f86dcc87247b0d4fb07eaae
Author: Kang-Hyesung <hyesung9797@gmail.com>
Date:   Sun Oct 22 22:45:19 2023 +0900

   FIRST COMMIT

해시 획득 후
git reset --hard(95291f9a6e9) 작성

$ git reset --hard 95291f9a6e9
HEAD is now at 95291f9 FIRST COMMIT

완료

reset 하기 전 시점으로 복원해보기

백업해 둔 .git 폴더 사용

.git 폴더 복원
git log, git status 로 상태 확인
아래 명령어로 현 커밋 상태로 초기화
git reset --hard
💡 뒤에 커밋 해시가 없으면 마지막 커밋을 가리킴
git status 로 상태를 확인해보면

$ git status
On branch main
nothing to commit, working tree clean

수정할 것 없이 완벽하게 이전 상태로 돌아갔다.

revert 로 과거의 커밋 되돌리기

reset과는 다르게 revert는 취소할 커밋을 찾아야 한다. 우리는 Add George to Tigers를 되돌릴 것이기 때문에 해시를 구할 것이다.
git revert (되돌릴 커밋 해시) 를 작성해주면

이런 화면이 나온다
:wq로 커밋 메시지 저장
소스트리에서 확인해 보면

밑에 있는 두 커밋을 건너 뛰고 Add george to tigers 내용만 삭제해주었다
두 사진을 비교해보자

Replace Lions with Leopards의 커밋 되돌려보기


Replace Lions with Leopards 에는 tigers 수정, leopards 생성, lions 삭제되었다는 기록이 있다. 그런데 문제는 Replace Cheetas with Panthers 에서 leopards를 수정했다라는 것이다.
즉 밑에서 만든 파일을 revert로 삭제해야 되는데 그게 중간에 파일을 수정하는 바람에 충돌이 나는 것이다.

이를 단순히 revert 해보면

맨 뒤의 reverting은 revert가 아직 진행중이라는 뜻이고, 위에 문제가 있다고 나오는데 우리가 결정을 해주어야 한다고 나온다. 주황색 두번째 hint에 git에서 add/remove로 상황을 해결하고 나서 실행하라는 의미이다. 우리는 삭제할 것이기 때문에 git rm leopards.yaml 이후 git revert --continue 를 실행해준다.

이처럼 진행화면이 나오면 :wq로 저장해준다.

성공적으로 revert 된 모습을 확인할 수 있다.

reset 사용해서 revert 전으로 되돌아가기

revert한 내용들을 삭제해주겠다.

revert하기 전의 해시를 복사해서
git reset --hard 214b206998c2769bb24442aa5fcf4c1a21 실행

$ git reset --hard 214b206998c2769bb24442aa5fcf4c1a21
HEAD is now at 214b206 Replace Cheetas with Panthers


성공한 모습

커밋해버리지 않고 revert하기

git revert --no-commit (되돌릴 커밋 해시)
원하는 다른 작업을 추가한 다음 함께 커밋
취소하려면 git reset --hard

0개의 댓글