git

#11 깃(Git) - 커밋을 삭제하고 취소하기 (reset)

에이블디 2021. 11. 12. 19:29

안녕하세요! 에이블디 입니다!

 

오늘은 지난 시간에 이어 커밋을 취소하는 방법에 대해 알아볼 건데요,

이번 시간에는 커밋을 삭제하고 취소하는 방법에 대해 알아보겠습니다!

 

지난 시간에 abled.txt의 상태가 스테이징이 되기 전 상태였었죠?

 

이번엔 abled.txt를 스테이징과 커밋을 한 번에 해보도록 해요!

스테이징과 커밋을 한번에 처리하는 명령어 기억나시나요?

커밋 메시지는 "abled.txt add Hi YAMA!"로 해서 처리해 보도록 합시다.

$ git commit -am "abled.txt add Hi YAMA"

스테이징과 커밋이 한 번에 이루어지는 걸 볼 수 있습니다!

 

하는 김에 깃 로그도 확인해 볼까요?

$ git log

커밋 메시지가 "abled.txt add Hi YAMA"인 커밋을 확인할 수 있습니다.

 

이제 방금 한 커밋을 취소해 볼까요?

최신 커밋을 취소하려면 git reset 명령을 이용하면 되는데요, 여기에 HEAD^ 옵션을 붙여주면 됩니다.

git log 명령을 실행했을 때 가장 최신 커밋에 (HEAD -> master) 표시가 있다고 한 것 기억나시죠?

HEAD^는 현재 HEAD가 가리키는 브랜치의 최신 커밋을 가리키는데, gir reset HEAD^ 명령으로 커밋을 취소하게 되면 커밋도 취소되고 스테이지에서도 파일이 내려지게 됩니다.

그럼 작업 파일은 작업 트리에만 남게 되어있겠죠?

 

바로 실습해 보도록 합시다!

$ git reset HEAD^

커밋이 취소되고 스테이지에서도 파일이 내려졌다는 메시지가 나타나는 걸 확인하실 수 있습니다!

 

정말 커밋이 취소됐는지 확인해 볼까요?

다시 한번 깃 로그로 확인 해 봅시다!

최신 로그 커밋 메시지가 "add Joker abledStudent.txt"로 바뀌어 있고 커밋 메시지가 "abled.txt add Hi YAMA"인 커밋 기록이 사라져 있는 걸 확인하실 수 있습니다.

 

지금까지 최신 커밋을 취소하는 방법을 알아보았는데요

 

이번엔 특정 커밋으로 되돌아가 그 이후의 커밋을 삭제하는 방법을 알아보도록 할게요!

 

특정 커밋으로 되돌릴 때는 git reset 명령 다음에 커밋 해시를 적어주면 됩니다.

바로 실습해 볼까요?

 

특정 커밋으로 되돌아갈 실습을 위해 몇 개의 커밋을 만들어 보도록 할게요.

abled.txt에 "commit1"을 추가하고 "C1"이라는 메시지와 함께 스테이징과 커밋을 함께 해주도록 합니다.

$ git commit -am "C1"

같은 방법으로 abled.txt에 "commit2"를 추가한 뒤 "C2" 커밋 메시지와 함께 커밋하고, abled.txt에 "commit4"까지 추가한 뒤 "C4" 메시지와 함께 순서대로 커밋하여 총 4번의 커밋을 해주도록 합니다.

최종적으로 abled.txt 파일에 내용은 위와 같이 되겠고 깃 로그로 확인해 보면

다음과 같이 C1 ~ C4 커밋 메시지를 가진 커밋이 생성된 걸 확인할 수 있습니다.

 

우리는 지금부터 C1 커밋으로 되돌아가 보도록 하겠습니다.

C1 커밋으로 이동하기 위해 git log 명령의 결과 화면에서 C1 커밋의 커밋 해시를 복사합니다.

커밋 해시는 지난 시간에서 배우셨죠?

그럼 깃 리셋 명령과 함께 해시를 적어주고 커밋 이동을 해볼까요?

$ git reset 12d7ce7af87f0850701d3ff7676c7a61be389663

스테이징에서 abled.txt가 내려가고 리셋되었다는 명령어가 나오네요!

깃 로그로도 확인해 보겠습니다!

최신 커밋이 커밋 메시지가 "C1"인 커밋으로 돌아온 것을 확인할 수 있습니다.

 

이때, 커밋과 스테이징 기록만 삭제되고 작업 트리에서 수정되었던 abled.txt의 상태는 commit4까지 그대로 유지된 것을 볼 수 있는데요.

수정 내용까지 취소하고 싶으시다면 git reset에 hard라는 옵션을 붙여주시면 됩니다.

hard옵션은 커밋과 스테이징, 파일 수정을 하기 전 상태로 작업 트리를 되돌리는 옵션인데요, 이 옵션으로 되돌린 내용은 복구할 수 없으니 주의해 주세요!

 

그럼 다시 실습해 볼까요?

 

깃의 상태를 확인해 보시면

이렇게 abled.txt 파일이 수정된 상태고 스테이징엔 올라가지 않았다는 걸 확인할 수 있습니다.

다시 abled.txt 파일을 스테이징과 커밋을 동시에 진행시켜주도록 할게요! 커밋 메시지는 "C5"로 하겠습니다.

$ git commit -am "C5"

깃 로그를 확인하시면

"C5"가 커밋 메시지인 커밋이 최신 커밋인 걸 확인할 수 있습니다.

 

다시 C1으로 돌아가 볼까요?

이번엔 abled.txt 파일의 수정된 내용까지 전부 되돌려 보겠습니다.

$ git reset --hard 12d7ce7af87f0850701d3ff7676c7a61be389663

HEAD가 C1으로 옮겨졌다는 메시지를 확인할 수 있네요!

깃 로그로 확인해 볼까요?

커밋 메시지가 "C1"인 커밋이 최신 커밋이 되어있습니다!

 

그럼 abled.txt 파일의 상태도 확인해야겠죠?

커밋 메시지가 "C1"인 작업 상태로 돌아가 "commit1"이라는 내용 이후의 수정 작업이 취소된 것을 확인할 수 있습니다.

 

마지막으로 reset의 옵션을 알아보고 이번 포스팅을 마무리하겠습니다.

--soft 최근 커밋을 하기 전 상태로 작업 트리를 되돌립니다.
--mixed 최근 커밋과 스테이징을 하기 전 상태로 작업 트리를 되돌립니다.
옵션 없이 git reset 명령을 사용할 경우 이 옵션을 기본으로 합니다.
--hard 최근 커밋과 스테이징, 파일 수정을 하기 전 상태로 작업 트리를 되돌립니다.
이 옵션으로 되돌린 작업은 복구할 수 없습니다.

 

이번 시간에는 커밋을 삭제하고 취소하는 방법에 대해 알아보았는데요,

다음 시간에는 커밋을 삭제하지 않고 되돌리는 방법에 대해 알아보겠습니다!

그럼 여러분! 다음시간에 만나요!