관리 메뉴

즐겁게, 코드

git reset으로 스테이징과 커밋 되돌리기 본문

😾 Git & Github

git reset으로 스테이징과 커밋 되돌리기

Chamming2 2021. 8. 22. 19:26

오늘 아침에는 프로젝트에 기능을 하나 추가하다가 커밋 메시지를 잘못 남긴 일이 있었습니다.
인터렉티브 리베이스를 하긴 뭔가 귀찮아서 git reset --hard HEAD^ 커맨드를 사용했는데요, 아뿔싸!

 

커밋과 스테이징은 물론 코드 수정사항까지 모두 이전 버전으로 되돌아가 코드를 다시 작성해야 했던 일이 있었습니다.

이런 일이 또 반복되지 않도록 git reset 커맨드의 내용을 정리해보려 합니다.

스테이징 취소하기

git add <파일명> 커맨드로 파일을 스테이징 영역에 올릴 수 있다는 것을 알고 계실 텐데요, 저는 파일명을 명시하는게 번거로워 git add . 로 변경사항을 한꺼번에 스테이징하곤 합니다.

다만 이러다 보니 원치 않는 파일까지 한번에 스테이징된다는 문제가 종종 생겨, 스테이징을 취소할 방법이 필요합니다.

이럴 때는 git reset <언스테이징할 파일명> 으로 특정 파일의 스테이징을 취소하거나, git reset 커맨드로 모든 파일의 스테이징을 취소할 수 있습니다.

스테이징이 취소되었다는 의미로 파일명이 초록색에서 빨강색으로 변한 모습입니다.

커밋 취소하기

이번에는 커밋을 취소해보도록 할텐데요, 마침 누가 잘못된 커밋을 남긴 모습입니다.

a9350f6 "BAD commit" 이라는 이름의 커밋을 취소하려면 먼저 git log 를 통해 커밋 로그를 확인합니다.

이후 a64b9f "feat: 파일 추가" 라는 커밋 이후의 커밋을 취소해야 하니, git reset --soft a64b9f 를 입력해줍니다.
그리고 git log 로 다시 커밋 로그를 확인해보면, 변경사항은 유지된 상태로 커밋만 취소된 것을 확인할 수 있습니다.

커밋을 취소할 때는 세 가지 옵션이 있습니다.

  • 변경사항 스테이징은 유지하고, 커밋만 취소할 때 : git reset --soft <커밋 포인터 또는 커밋 해시값>
  • 변경사항 스테이징과 커밋 모두 취소할 때 : git reset --mixed <커밋 포인터 또는 커밋 해시값>
Tip. 플래그 없이 git reset 을 사용하면 git reset --mixed 옵션이 기본으로 적용됩니다!
  • 변경사항 스테이징과 커밋 모두 취소하고, 코드 변경사항까지 폐기할 때 : git reset --hard <커밋 포인터 또는 커밋 해시값>

맨 위에서 제가 실수한 것도 바로 git reset --hard 를 사용해 커밋과 모든 코드 변경사항을 날려버려 생긴 문제였는데요, 다음 글에서는 날려버린 커밋을 git reflog 로 우아하게 복구하는 방법을 소개하도록 하겠습니다.

반응형
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆