1. 설명

리셋은 되돌아가고 싶은 커밋을 선택했을 때, 선택된 이후의 모든 커밋 이력을 제거함으로써 이력을 되돌립니다.

위 [그림 7-1]을 보면 HEAD는 C11입니다. HEAD를 C8으로 되돌리기 위해 C8로 리셋을 수행하면 이력 C8 이후에 남겼던 이력 C9, C10, C11이 모두 커밋 히스토리에서 사라지게 됩니다.

이렇게 리셋을 수행하면 C9, C10, C11는 전부 삭제되는 것일까요?

아닙니다! 리셋을 수행할때는 커밋 히스토리에서 제거되는 커밋을 어떻게 처리할지 지정할 수 있습니다. 지정할 수 있는 옵션은 아래 [그림 7-2]와 같이 soft, mixed, hard 총 세 가지 가 있습니다.

각 옵션별 동작은 다음과 같습니다.

  • soft: 이력에서 제거하고 내용을 인덱스에 둡니다.
  • mixed: 이력에서 제거된 내용을 작업 디렉토리에 변경됨 상태로 둡니다.
  • hard: 이력에서 제거된 내용을 완전히 제거합니다.

리셋은 뒤에서 다룰 리버트와 달리 기존의 이력을 제거하고 변경사항을 영구적으로 되돌립 니다. 특히 hard 옵션은 사용하는데 주의를 기울여야 합니다.

[주 의]

이미 원격저장소에 푸시(Push)된 적이 있는 이력을 리셋을 사용해 되돌리면 변경사항을 푸시할 때 로컬저장소의 상태와 원격저장소의 상태가 맞지 않아 에러가 발생합니다. 그렇기 때문에 리셋은 일반적으로 원격저장소에 푸시된 적이 없는 로컬저장소의 작업을 되돌릴 때 사용해야 합니다.

2. 소스트리에서 사용하기

앞에서 배운 내용을 실제 소스트리에서 사용하는 법을 알아보도록 하겠습니다. 지금 하려고 하는 작업은 저장소에 추가된 기능 중 무인주행 관련 기능을 제거하는 것입니다. 리셋을 사용해 무인주행 관련 기능을 제거해 보겠습니다. 리셋을 시작하기 전 먼저 현재 저장소의 상태를 살펴보겠습니다.

현재 저장소 상태는 아래 [그림 7-3] 과 같이 HEAD는 master 브랜치의 “11. 무인 주행 성 능 개선” (이하 11번 커밋)이라는 커밋을 가리키고 있습니다.

커밋 히스토리를 살펴보면 무인주행 관련 기능은 커밋메시지 9번부터 11번 까지입니다. 이 커밋을 저장소에서 제거하기 위해서는 “8. 기본 주행 시뮬레이션 가능하도록 구현” 이라는 커밋 이후의 이력을 커밋 히스토리에서 제거해야 합니다.

리셋을 수행 하기 위해 위 [그림7-4] 와 같이 8번 커밋 메시지 선택하고 마우스 오른쪽 버튼 클릭한 후 “Reset master to this commit” 메뉴를 선택합니다.

메뉴를 선택하면 위 [그림 7-5]와 같이 확인 팝업이 노출돼서 리셋에 사용할 모드를 선택할 수 있습니다.

디폴트는 Mixed입니다. 리셋의 모드는 위 [그림 7-6] 처럼 Soft, Mixed, Hard 세 가지 중 하나를 선택할 수 있습니다.

2.1 Soft

첫번째로 Soft 모드를 선택해 리셋을 해보겠습니다.

위 [그림7-7]과 같이 8번 커밋으로 리셋을 실행한 후 리셋 옵션 선택 화면에서 Soft 모드를 선택합니다.

리셋이 완료되면 8번 커밋으로 리셋 됐기 때문에 8번 이후 커밋인 9, 10, 11번 커밋은 커밋 히스토리에서 제거 됐습니다. 리셋 수행시 모드를 Soft로 지정했기 때문에 리셋으로 인해 히 스토리에서 제거된 변경 사항은 아래 [그림 7-9]와 같이 인덱스에 남아있게 됩니다.

2.2 Mixed

두번째로 Mixed 모드를 선택해 리셋을 해보겠습니다.

앞과 동일하게 [그림7-10]과 같이 8번 커밋으로 리셋을 실행한 후 리셋 옵션 선택 화면에서 Mixed 모드를 선택합니다.

리셋이 완료되면 8번 커밋으로 리셋 됐기 때문에 8번 이후 커밋인 9, 10, 11번 커밋은 커밋 히 스토리에서 제거 됐습니다. 리셋 수행시 모드를 Mixed로 지정했기 때문에 리셋으로 인해 히 스토리에서 제거된 변경 사항은 아래 [그림 7-12]와 같이 작업 디렉토리에 남아있게 됩니다.

2.3 Hard

마지막으로 Hard 모드를 선택해 리셋을 해보겠습니다.

앞과 동일하게 [그림7-13]과 같이 8번 커밋으로 리셋을 실행한 후 리셋 옵션 선택 화면에서 Hard 모드를 선택합니다.

리셋이 완료되면 8번 커밋으로 리셋 됐기 때문에 8번 이후 커밋인 9, 10, 11번 커밋은 커밋 히스토리에서 제거 됐습니다. 리셋 수행시 모드를 Hard로 지정했기 때문에 리셋으로 인해 히스토리에서 제거된 변경 사항은 아래 [그림 7-15]와 같이 인덱스와 작업 디렉토리 그 어떤 곳에도 남아있지 않고 완전히 사라졌습니다.