Get Up & Code, MacKin Talk

깃(Git)&깃허브(Github) 배우기 -4(커밋 되돌리기, reset, revert) 본문

Computer Science/Git,Github

깃(Git)&깃허브(Github) 배우기 -4(커밋 되돌리기, reset, revert)

맥킨 2021. 2. 18. 23:14

깃& 깃헙 배우기 시리즈
내용이 잘 이해되지 않는다면 이전 포스팅을 차례로 확인하실 것을 추천드립니다.

2021/02/14 - [Computer Science/Git,Github] - 깃(Git)&깃허브(Github) 배우기 -1

2021/02/15 - [Computer Science/Git,Github] - 깃(Git)&깃허브(Github) 배우기 -2(깃 저장소 만들기)

2021/02/16 - [Computer Science/Git,Github] - 깃(Git)&깃허브(Github) 배우기 -3(커밋 확인 및 버전 관리)


포스팅 개요.

 

 

지난 포스팅에서 파일을 수정하고, 스테이징 및 커밋 방법에 대해서 익혔습니다.

이번 포스팅에서는 수정한 내용을 취소하고, 가장 최신 버전 상태로 되돌리는 방법에 대해 수정, 스테이징, 커밋 단계로 나눠 소개해드리도록 하겠습니다.

 

이는 3가지 단계로 나눌 수 있습니다.

 

1. 수정사항을 취소하고, 최신 버전으로 되돌리기

2. 스테이징된 수정사항을 취소하고, 최신 버전으로 되돌리기
3. 최신 커밋을 취소하고, 이전 최신 버전으로 되돌리기

 

코드를 수정하다보면 원인 모를 이유로 정상적인 빌드가 안 되는 상황을 맞이하는 경우가 많습니다.(정말..)

그러면 기존에 정상적인 실행이 됐던 버전으로 되돌아갈 필요가 있는데, 일일이 코드를 이전 코드로 변경하는 것은 쉬운 일이 아닙니다.

이때, 깃을 사용한다면 큰 도움을 받을 수 있습니다.

git checkout

명령어 하나로 해당 작업을 대체할 수 있습니다.

 

먼저 수정사항을 취소하고, 최신 버전으로 되돌리는 방법에 대해 소개하겠습니다.

지난 포스팅에서 만들었던 change.txt 파일의 일부 내용을 vim 편집기를 이용해 수정해줍니다.

그리고

git status

명령어를 사용해 수정된 파일의 현재 상태에 대해서 확인해보도록 하겠습니다.

modifed: change.txt를 확인할 수 있고,

Changes not staged for commit: 내부에 있으니, 스테이지 영역에 들어가지 않은 상태입니다.

이제

git checkout -- change.txt를 입력해 변경 사항을 취소해보겠습니다.

이후 cat 명령어로 파일의 내용을 확인해보면, 지난 포스팅에서 마지막으로 커밋했던 최신 버전으로 되돌아간 것을 확인할 수 있습니다.

이번에는 스테이징 된 수정사항을 취소하고, 최신 버전으로 되돌리는 방법에 대해 알아보겠습니다.

위와 같은 방식으로 vim 편집기로 change.txt 파일을 실행하고, 내용을 수정해 저장하도록 하겠습니다.

먼저 vim 파일의 마지막 줄을 "add line"에서 "erase this line!"으로 수정하였습니다.

이후 수정된 내용을 git add 명령어를 사용해 스테이징 영역에 넣었습니다.

다음과 같이 스테이징 영역에 들어간 것을 확인할 수 있습니다.

이제 이 스테이지에서 방금 add한 파일을 unstage 해보도록 하겠습니다.

git reset HEAD change.txt

를 입력합니다.

 

이제 다시 콘솔 창에 status 명령어를 입력해보면 다음과 같은 내용을 확인할 수 있습니다.

즉, 다음과 같이 unstaged 상태로 되돌아간 것을 확인할 수 있습니다.

이제 마지막으로 최신 커밋을 되돌리는 방법에 대해 알아보도록 하겠습니다.

먼저 change.txt 파일에 일부 내용을 추가해주었습니다. (vim 편집기 사용) 이후 수정된 파일을 커밋까지 진행해줍니다.

git commit -am "commit"

이를 cat 명령어로 터미널에 출력해보면 다음과 같습니다.

이후 이전의 최신 커밋으로 되돌리기 위해 git reset HEAD^를 작성해줍니다. HEAD^는 HEAD가 가리키는 브랜치의 최신 커밋을 나타내며, 이 명령어를 사용할 경우, 커밋도 취소되지만, 스테이지에도 수정 파일의 반영이 취소되는 것을 확인할 수 있습니다.

허나 스테이지 영역에서 내려갔을 뿐이지, 작업 트리에서는 여전히 수정된 상태로 반영되고 있습니다.

깃에는 항상 최신 버전으로만 되돌리는 것이 아니라 필요한 버전으로 되돌릴 필요성이 있습니다.

방금은 git reset HEAD^ 명령어를 사용해 최신 버전으로 되돌렸지만, 특정 버전으로 되돌리고, 이후 버전들을 삭제할 수도 있습니다.

특정 커밋으로 되돌릴 때는 git reset 명령 이후에 해시를 사용해야 합니다.

먼저 특정 커밋을 반영하기 위해 여러 번의 커밋을 임의로 생성해보겠습니다.

a <- 1번째 커밋에서 반영

b <- 2번째 커밋에서 반영

c <- 3번째 커밋에서 반영

d <- 4번째 커밋에서 반영

e <- 5번째 커밋에서 반영

먼저 5번의 커밋을 만들기 위해 커밋 과정을 5번 진행하였습니다.

커밋 메시지는 "R1, R2, R3, R4, R5"로 설정하였고, 2번째 커밋으로 되돌아가 보도록 하겠습니다.
git log에 접속해 커밋의 해시값을 복사해줍니다.

이제

git reset -- hard 해시 주소

명령어를 사용해 2번째 커밋을 최신 상태로 되돌리도록 하겠습니다.

git log

명령어를 사용하시면, 의도했던 대로 R3, R4가 사라졌음을 확인할 수 있습니다.

 

git reset

의 경우, 커밋을 되돌림과 동시에 이후에 진행된 커밋의 내용이 모두 사라집니다.
따라서 만일 이후에 사용할 것을 대비해 커밋을 되돌리더라도 취소된 커밋 정보가 유지되도록 할 수 있습니다.

이때 사용하는 명령어가 git revert입니다.

// 사용법

git revert 해시 주소

git revert를 할 경우, 편집기가 열리고, 추가로 남길 메시지를 함께 남길 수 있습니다.

 

마지막으로 cat 명령어를 사용해 결과를 확인해보면

 

2번째 커밋까지 반영됐던 a와 b만 출력되는 것을 확인할 수 있습니다.

 

 

 

다음 포스팅에서는 깃(git)과 함께 브랜치(branch)에 대해 함께 학습해보도록 하겠습니다.


참고

Do it! 지옥에서 온 문서 관리자 깃&깃허브 입문 / 이지스퍼블리싱

깃헙 :github.com/


깃& 깃헙 배우기 시리즈
내용이 잘 이해되지 않는다면 이전 포스팅을 차례로 확인하실 것을 추천드립니다.

2021/02/14 - [Computer Science/Git,Github] - 깃(Git)&깃허브(Github) 배우기 -1

2021/02/15 - [Computer Science/Git,Github] - 깃(Git)&깃허브(Github) 배우기 -2(깃 저장소 만들기)

2021/02/16 - [Computer Science/Git,Github] - 깃(Git)&깃허브(Github) 배우기 -3(커밋 확인 및 버전 관리)