[Git] reset : 이전 커밋으로 브랜치를 되돌리기

2022. 4. 21. 13:32Git

reset 기능의 필요성

예를 들어 개발자가 '좋아요' 및 '싫어요' 버튼을 만들었다고 가정합니다. 그런데 수정된 요청 사항이 '싫어요' 버튼은 빼고 '좋아요' 버튼만 만들어 달라고 바뀌었습니다. 하지만 이미 '싫어요' 버튼까지 개발이 끝난 상황입니다. 다행인 점은 중간 중간 커밋을 자주 만들어놔서 이전 커밋으로 상태만 되돌리면 됩니다. 이럴때 사용하는 기능이 reset(되돌리기) 기능입니다.

 

이전글

https://yonghwankim-dev.tistory.com/328

 

[Git] amend: 수정 못한 파일을 방금 만든 커밋에 추가

예를 들어 개발을 하고 커밋을 하나 생성하였는데, 추가할 파일이나 수정해야 되는 부분을 발견하였습니다. 그렇다면 커밋을 또하나 수정하는 대신에 최근에 생성한 커밋을 정정하는것이 더 깔

yonghwankim-dev.tistory.com

 

1. Soft/Mixed reset : 모든 기억을 남기면서 브랜치를 되돌리기

1.1 [feat/a] 브랜치와 [feat/b] 브랜치를 원격저장소에 푸시

1.2 현재 브랜치 [feat/b], 현재 [feat/b] 브랜치는 최신 커밋인 '두번째 커밋 : 체리픽 실습하기' 커밋에 있습니다. 이상태에서 [feat/b] 브랜치의 최신 상태를 하나 전인 'featb.md 파일 추가' 커밋으로 돌려보겠습니다.

'feat.md 파일 추가' 커밋 선택 -> 오른쪽 마우스 버튼 클릭 -> [이 커밋까지 현재 브랜치를 초기화]를 클릭합니다.

 

1.3 초기화 버튼을 클릭하면 다음과 같은 알림이 출력됩니다.

  • Soft : Soft 모드로 초기화를 하면 커밋하기 전으로 돌아가고 해당 커밋의 변경사항인 second.md 파일이 스테이지 위에 올라간 상태로 초기화됩니다.
  • Mixed : Mixed 모드로 초기화를 하면 커밋하기 전으로 돌아가고 second.md 파일이 스테이지 아래로 내려옵니다.
  • Hard : Hard 모드로 초기화를 하면 second.md 파일이 삭제된 상태로 초기화됩니다.

1.4 Mixed 모드로 선택하고 확인 버튼 클릭

초기화를 선택한 커밋으로 되돌아왔고 second.md 파일은 스테이지 내려와서 '추적 안함' 상태로 되돌아갑니다. 만약 Soft 모드로 초기화를 했다면 second.md 파일은 스테이지에 올라가서 '스테이지됨' 상태로 되돌아갈 것입니다.

 

2. Hard reset : 모든 기억을 지우며 브랜치를 되돌리기

2.1 Hard 모드로 reset을 수행하면 커밋하지 않은 변경사항이 얼마나 있는지와 상관없이 전부 삭제됩니다.

실습을 위해서 우선 미래로 돌아가여 [origin/feat/b]에 있는 '두번째 커밋 : 체리픽 실습하기' 커밋으로 초기화하겠습니다. (Hard 모드로 초기화)

실행결과 우선 second.md 파일이 생성 및 작성하고 커밋을 한 상태로 되돌아갔습니다.

 

2.2 Hard 모드로 'featb.md 파일 추가' 커밋으로 초기화를 수행합니다. 'featb.md 파일 추가' 커밋 선택 -> 오른쪽 마우스 클릭 -> [이 커밋까지 현재 브랜치를 초기화] 클릭 -> Hard 모드 설정 -> 확인

위 실행결과를 보면 '두번째 커밋 : 체리픽 실습하기' 커밋의 변경사항인 second.md 파일 생성 및 작성이 Hard Reset되어 되돌아 왔을때 second.md 파일 자체가 없는 것을 확인할 수 있습니다.

 

이제 [feat/b] 브랜치의 원격저장소에도 로컬 저장소의 내용을 반영하기 위해서 강제 푸시를 수행합니다.

 

2.3 [feat/b] 강제 푸시 수행

위 결과를 보면 feat/b 원격저장에도 초기화된 결과가 반영된 것을 알 수 있습니다.

 

References

source code : https://github.com/yonghwankim-dev/git_study
팀 개발을 위한 Git Github 시작하기, 정호영 진유림 저