0. 시작하기에 앞서
이 글을 보기에 앞서 먼저 git log라는 명령어 혹은 소스트리 등을 이용하여
First Commit -> Replace Cheong with apeach -> Add Costco to Cheong -> Add team Game -> Replace Game with Friend
으로 되어있는 커밋들이 존재하는지 확인해주시길 바랍니다. (이름은 작성자에 따라 달라질 수 있습니다.)
1. 과거로 돌아가는 방법
과거로 돌아가는 방법으로는 두 가지 방법이 존재합니다.
Reset
Reset은 말 그대로 원하는 시점으로 돌아간 뒤 이후 내역들을 지워버립니다. 만약 Add team Game으로 되돌아간다면 이후 행적인 Replace Game with Friend라는 커밋은 지워지는 것입니다.
Revert
Revert는되돌리기 원하는 시점의 커밋을 거꾸로 실행합니다. 즉, 되돌아간 이후의 커밋들을 지워버리는 게 아니라 자신이 고치고 싶은 것만을 고쳐내고 이후의 커밋들은 보존하는 게 가능합니다.
언제 Reset을 사용하고 언제 Revert를 사용할까?
보통의 협업프로젝트에서는 가급적 Revert를 사용합니다. 협업 프로젝트는 혼자서 하는 것이 아닌, 다른 팀원과 같은 branch를 공유하는 상황이 많기 때문에 과거의 커밋으로 돌아가기 위하여 Reset을 사용했다면 다른 팀원들이 가지고 있는 코드와 충돌이 일어날 수 있기 때문입니다.
2. Reset 이용해보기
※ 시작하기 앞서 .git 폴더를 다른 폴더에 복사하여 주시길 바랍니다.
우리는 Reset을 이용하여 Add team Game이라는 커밋으로 돌아가 보겠습니다. 먼저 git log를 사용하여 우리가 돌아가려는 시점의 해시(commit 옆에 있는 부분)를 확인해줍니다. 그것을 복사하고 git log를 빠져나와 아래 명령어를 작성해보도록 하겠습니다.
# --hard 뒤에는 돌아갈 커밋 해시 작성
git reset --hard 52ad58868405fdddc5fa1d3bb14b43f80b13b8ca

저의 경우에는 돌아가려는 해시가 저 숫자와 영어이기 때문에 저렇게 작성하였지만 이 글을 따라 하시는 분들은 자신의 해시를 작성해주셔야 합니다. 작성을 하였다면 Add team Game으로 돌아간 것을 확인할 수 있습니다.
Add team Game으로 돌아왔다면 이번에는 First Commit으로 돌아간 후 다음으로 넘어가도록 하겠습니다.
되돌아왔다면 다시 git log를 작성해보겠습니다. 그러면 First Commit이라는 이름의 커밋 하나만 존재하는 걸 확인할 수 있습니다.
Reset을 하기 전 시점으로 복원하기
먼저 우리가 공부하던 파일에 들어가 .git 파일을 삭제해준 후 처음에 만들어두었던 백업 파일에 존재하는 .git 폴더를 복사해줍니다. 그러고서 git log를 작성해준다면 우리가 Reset 하기 전 상태의 커밋들이 존재하는 것들을 확인할 수 있습니다.
여기서 재미있는 사실은 git status를 작성해준다면 아래 그림과 같이 현재 존재하는 파일들을 토대로 수정 혹은 생성이 되어있다고 판단을 하게 됩니다.

그렇다면 파일을 맨 마지막 커밋으로 돌려오기 위해서는 어떻게 해야 할까요? 바로 마지막 커밋으로 Reset을 시켜주면 됩니다. 아래 명령어를 작성해보도록 하겠습니다.
git reset --hard
원래라면 --hard 이후에 커밋의 해시를 작성해주어야 하지만 아무것도 작성하지 않는다면 자동으로 맨 마지막 커밋으로 reset 시켜줍니다. 해당 명령어를 사용한다면 다시 Replace Game with Friend라고 저장되어 있는 커밋으로 파일들이 복구가 되었지만 Back.yaml이라는 파일이 계속해서 존재하는 것을 확인할 수 있습니다. 그 이유는 Untracked files로 구분이 되어 아직 git이 관리하지 못하는 새롭게 생성된 파일로 생각하기 때문입니다. 이 파일은 그냥 사용자가 지워주도록 하겠습니다.
'Git & GitHUB' 카테고리의 다른 글
[Git] 과거의 프로젝트로 돌아가기(SourceTree) (0) | 2022.07.01 |
---|---|
[Git] 과거의 프로젝트로 돌아가기(Revert) (0) | 2022.06.30 |
[Git] Git에 파일 저장하기 (0) | 2022.06.28 |
[Git] Git의 관리에서 특정 파일을 배제하는 방법 (0) | 2022.06.27 |
[Git] Git 설정 & 프로젝트 관리 (0) | 2022.06.26 |