Git 사용법

자세한 Git 사용법 - 8 (reset, revert)

Everyday Growing Engineer 2022. 9. 26. 12:05

1. 리셋 (reset)

리셋은 커밋을 기준으로 이전 코드로 되돌리는 방법으로, 기록한 커밋을 취소합니다. 커밋을 취소하는 만큼 리셋할 때는 항상 신중하게 작업해야 함.

 

  • $ git log --oneline : 간략한 커밋 해시 값과 메시지 값만 출력
  • $ git reset --hard HEAD^^^ : 고정된 커밋 해시 값을 사용하지 않고, HEAD 포인터를 이용하여 상대적 위치를 지정가능. ^(캐럿) 또는 물결(~) 기호를 사용해 HEAD의 상대적 위치를 지정 가능.
  • $ git reset 옵션 커밋ID : reset 명령어를 사용하면 지정된 커밋 코드로 되돌아감
    • soft : 스테이지 영역을 포함한 상태로 복원
    • mixed : 기본 옵션 값은 mixed입니다. reset 명령어를 사용할 때 옵션을 지정하지 않으면 기본값인 mixed로 선택
    • hard : 실제 파일이 삭제된 이전 상태로 복원합니다.

soft 옵션과 mixed 옵션 차이는 크게 스테이지 영역과 관련이 있다. hard 옵션은 워킹 디렉토리와 관련이 있다.

 

1-1. soft 옵션 

soft 옵션은 가장 낮은 단계의 리셋 동작. 리셋후 수정된 파일은 스테이지 영역에 등록되어 있음.

reset --soft  명령어의 원리를 이용하면 마지막 커밋을 수정할 수 있다. 이것은 마치 --amend 명령어와 유사

  • git reset --soft HEAD~ : 이전 커밋으로 돌아감. 이전 커밋은 커밋만 안된상태로 남음.

1-2. mixed 옵션

  • git reset --mixed 커밋ID : 리셋한 후 스테이지 상태까지 복원하지 않습니다.  그래서 커밋전에 add를 해줘야 한다.
  • git reset 커밋ID : 생략시 mixed로 됨.

1-3. hard 옵션

  • git reset --hard HEAD~ : hard 옵션을 사용하면 워킹 디렉터리 내용도 함께 삭제
  soft mixed hard
차이 스테이지 영역까지 남김 워킹 디렉터리 남김 모두 지움

 

  • $ git reset --soft HEAD~2 : 2단계 전의 커밋으로 리셋(soft 옵션)
  • $ git reset --soft HEAD~2 (2단계 전이 리셋) -> $ git commit -m "menu3/4" (add menu 3,4)

특정 파일만 리셋 (unstage 상태로) 

  • git reset --mixed HEAD 파일이름

1-4. 병합 취소

  • git checkout -b menu 해시값

!!! 주의할 점 !!!

  • 저장소를 외부에 공개했거나 공유하고 있다면 주의해서 리셋을 사용해야한다.

2. 리버트 (revert)

리버트는 기존 커밋을 남겨 두고 취소에 대한 새로운 커밋을 생성

  • $ git revert HEAD : 현재 커밋을 revert. revert 하면 새로운 메시지 작성.
  • $ git revert 커밋ID : 리버트는 한 번에 커밋 하나만 취소할 수 있음
  • $ git revert 커밋ID .. 커밋ID : 범위 지정 연산자로 여러 커밋을 리버트 가능.

2.1 병합 취소

  • git revert --mainline 숫자 병합커밋ID