포시코딩

Eclipse Git(2) - Reset, Revert (Git을 되돌리는 방법) 본문

Git

Eclipse Git(2) - Reset, Revert (Git을 되돌리는 방법)

포시 2022. 6. 26. 18:21
728x90

git에서 index란?

git의 commit 작업은 '작업 트리'에 있는 변경 내용을 저장소에 바로 기록하는 것이 아니라

그 사이 공간인 index에 파일 상태를 기록(state - 스테이징)하게 되어 있다.

따라서 저장소에 변경 사항을 기록하기 위해서는 기록하고자 하는 모든 변경 사항들이 index에 존재해야 한다.

 

git을 되돌리는 방법 두 가지

Reset

  • 이력을 없애면서 과거로
  • 이미 push한 상태에 대해서는 소스를 되돌아가 다시 보는 기능 정도로만 사용 가능
  • 보통 push하기 전 잘못된 내용을 local에 commit한 상태에 대해서만 특정 commit으로 되돌아가 
    다시 알맞게 수정 후 commit하는 용도로 사용

Revert

  • 이전에 작성한 commit을 안전하게 지우고 싶을 때
  • 과거로 돌아가지만 돌아간 사실에 대해 commit을 남김
  • push 되어 있는 상태에 대해서 다시 되돌아갈 때 이 기능 사용

 

직접 해보기

먼저 흐름을 파악하면 다음과 같다.

  1. 초기 상태
  2. reset 1. 로컬에서 commit을 잘못 했을 때 다시 reset 한 다음 새로 commit
  3. reset 2. 예전 코드 확인용으로 쓸 경우
  4. reset 3. 다시 최신화 하기
  5. revert. 전부 push 했지만 되돌려야 하는 경우

초기 상태

 

reset 1. 로컬에서 commit을 잘못 했을 때 다시 reset 한 다음 새로 commit

  • 7-1. CC 추가 라는 commit이 잘못된걸 인지

 

  • Soft: commit만 되돌리고 싶을 때
  • Mixed: 변경한 인덱스의 상태를 원래대로 되돌리고 싶을 때
  • Hard: 최근의 커밋을 완전히 버리고 이전 상태로 복구

 

  • 되돌아간 모습

 

  • 알맞게 변경한 후 다시 commit을 진행한 모습. (예전 7-1로 commit한 내용은 볼 수 없다.)

 

reset 2. 예전 코드 확인용으로 쓸 경우

  • 7-2 까지  remote에 push 된 상태에서 예전 코드를 확인하고 싶은 경우이다.

 

 

 

  • 5. aa commit으로 돌아온 모습을 볼 수 있다.
  • 이 상태에서 내용 수정 및 commit을 하고 push를 시도하면 conflict가 발생하니 주의
  • 만약 과거로 돌아간 다음 다시 수정해야 한다면 하단에서 나오는 revert를 사용하면 된다.

 

reset 3. 다시 최신화 시키기

  • reset하여 master 브랜치와 2개의 commit 만큼의 차이가 나기 때문에 위와 같은 표시 확인 가능.
  • pull로 땡겨오면 다시 코드 및 index를 최신 상태로 만들 수 있다.

 

revert. 전부 push 했지만 되돌려야 하는 경우

  • 7-2 까지 push를 진행했는데 다시 보니 7번째 줄의 "DD" 대신
    5번 commit으로 돌아가 KK로 진행해야 했다고 가정해보자
    이 때, revert를 사용하면 된다.

 

  • 406cb51 5. aa commit에 대해 Revert Commit을 누르면

 

  • conflict가 발생한 것을 확인할 수 있다. (같은 파일에 대해 내용이 다른 경우)

 

  • history에서 돌아갈 commit을 더블클릭하면 merge tool과 비슷한 창이 뜬다.

 

수정 후 commit, push까지 완료한 모습

이렇게 revert를 통해 잘못된 commit들에 대해서까지 수정을 진행해보았다.

 

 

* 23년 1월 19일 기준으로 다크모드 시 가독성 떨어지는 문제 해결

* 19년도 기준으로 작성된걸 정리한 내용이라 현재 버전과 보이는게 다를 수 있습니다.

728x90

'Git' 카테고리의 다른 글

Eclipse Git(6) - Stash  (0) 2022.06.26
Eclipse Git(5) - Cherry-Pick  (0) 2022.06.26
Eclipse Git(4) - Rebase  (0) 2022.06.26
Eclipse Git(3) - Merge  (0) 2022.06.26
Eclipse Git(1) – Commit, Push, Clone  (0) 2022.06.23