안녕하세요! 에이블디 입니다!
오늘은 지난 시간에 이어 커밋을 취소하는 방법에 대해 알아볼 건데요,
이번 시간에는 커밋을 삭제하고 취소하는 방법에 대해 알아보겠습니다!
지난 시간에 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 | 최근 커밋과 스테이징, 파일 수정을 하기 전 상태로 작업 트리를 되돌립니다. 이 옵션으로 되돌린 작업은 복구할 수 없습니다. |
이번 시간에는 커밋을 삭제하고 취소하는 방법에 대해 알아보았는데요,
다음 시간에는 커밋을 삭제하지 않고 되돌리는 방법에 대해 알아보겠습니다!
그럼 여러분! 다음시간에 만나요!
'git' 카테고리의 다른 글
#13 깃(Git) - 브랜치(branch)와 머지(merge)란 무엇일까? (0) | 2021.11.17 |
---|---|
#12 깃(Git) - 커밋 삭제하지 않고 이전 버전으로 되돌리기 (revert) (2) | 2021.11.15 |
#10 깃(Git) - 수정한 파일, 스테이징 되돌리기 (restore) (6) | 2021.11.11 |
#9 깃(Git) - 커밋 메시지 수정하기 (0) | 2021.11.10 |
#8 깃(Git) - 특정 파일과 디렉터리를 버전 관리에서 제외하기 (0) | 2021.11.10 |