지금까지 저희는 버전을 생성하는 방법에 대해 알아봤습니다. 생성된 버전이 잘못되었을 때 이전 버전으로 돌아가려면 어떻게 해야 할지 알아보겠습니다. 이전 버전으로 돌아가는 명령어는 git reset과 git revert가 있습니다. 그중에서 이번에는 git reset에 대해 알아보겠습니다.
1. git reset
첫 번째로 배울 명령어는 git reset입니다. git reset <커밋 해시> 는 "해당 커밋으로 돌아가겠다" 라는 의미입니다. 단, 추후에도 말씀 드리지만 reset을 하게되면 돌아가려는 커밋 이후로 생성되었던 버전들은 사라지게 되므로 주의하셔야 됩니다.
사용 방법은 git reset <커밋 해시>입니다. <커밋 해시> 부분에 돌아가려는 커밋 정보를 적어주시면 되는데요. 아래 예시를 참조하시면 좀 더 이해가 쉬울 거예요.
1) 먼저 원하는 커밋 정보를 찾기 위해 git log --oneline --graph 명령어를 사용하였습니다.
2) git reset 70aa89f 명령어를 사용하여 원하는 버전으로 되돌리기
3) log 정보를 한번 더 사용해보면 head는 70aa89f 커밋으로 이동되어있고, 그 이후에 작성되었던 버전들은 없어져있는 것을 볼 수 있습니다.
여기서 중요한 사실은 이동한 버전 이후에 생성된 버전은 모두 없어졌다는 점과 커밋은 돌아갔으나, Working Tree의 파일 내용은 변경이 되지 않았다는 것입니다. cat명령어를 사용하여 A.txt 파일 내용을 살펴보면 파일의 내용은 그대로임을 알 수 있습니다.
우리는 git reset <커밋 해시>는 default로 원하는 커밋 해시로 돌아가나, 파일의 내용까지 변경하지 않는다는 것을 알 수 있는데요. 파일의 내용을 해당 커밋의 내용으로 변경하는 방법에는 두 가지가 있습니다. 첫 번째는 git reset에 옵션을 추가하는 방법 : git reset --hard <커밋 해시> 두 번째는 git restore <file name>을 통해 수정 사항을 삭제하는 방법입니다.
첫 번째 방법 git reset --hard <커밋 해시> 예시를 보여드리겠습니다.
git reset --hard <커밋 해시>를 사용하면 아래 보시는 바와 같이 A.txt의 내용이 변경된 것을 볼 수 있습니다. --hard 옵션을 넣게 되면 해당 커밋으로 변경되며 파일 수정사항 또한 해당 커밋으로 변경되게 됩니다.
추가로, git reset 옵션에 대해 적어놓으니 reset사용 시 참고하시면 좋을 것 같습니다.
명령어 | 내용 |
git reset –soft <커밋해시> | 원하는 버전으로 돌아가나, 파일 내용은 변함이 없음. commit하기 전상태로 변경됨 |
git reset –mixed <커밋해시> | 원하는 버전으로 돌아가나, 파일내용은 변함이 없음. add하기 전 상태 |
git reset –hard <커밋해시> | 원하는 버전으로 완전 돌아감 |
두 번째 방법인 git restore <file name>은 현재 커밋과 Working Tree의 파일 간 변경사항이 있을 때, file의 변경 사항을 커밋에 저장되어있는 파일 내용으로 되돌려 주는 명령어입니다.
아래 예시와 같이 현재 커밋에 수정된 파일 A.txt 있을 때 git restore <file name>을 사용해주면 A.txt의 "add context"라는 내용이 현재 커밋에 저장된 A.txt의 내용으로 변경됩니다.(현재 커밋에서 A.txt 파일에는 아무 내용이 없으므로 안 읽힘)
*Reference
- "지옥에서 온 문서 관리자 깃&깃허브 입문" 이지스버블리싱 - 이고요, 고경희 지음
-
-
부족한 글이지만 읽어주셔서 감사합니다.
'프로그래밍 > GIT' 카테고리의 다른 글
(2-1) git branch란? (0) | 2022.11.08 |
---|---|
(1-8) git 버전관리 - 이전 버전으로 돌아가기 git revert (0) | 2022.10.25 |
(1-6) git 버전관리 - git의 원리(git의 파일 상태 ) (1) | 2022.10.05 |
(1-5) git 버전관리 - git의 원리(git의 구조) (0) | 2022.10.04 |
(1-4) git 버전관리 - 버전 내용 확인하기(git log, commit) (2) | 2022.10.03 |