복귀

되돌리기

리셋

리셋은 커밋을 기준으로 이전 코드로 되돌리는 방법으로, 기록한 커밋을 취소한다.

$ git reset {option} {commitID}
  • 옵션
    • soft : 스테이지 영역을 포함한 상태로 복원.

        $ git reset --soft {commitID}
      

      Untitled

      • 파일을 수정 후, add 명령어로 스테이지 영역에 올려 커밋 실행하기 직전의 단계로 돌린다.
      • 단순히 HEAD 위치를 이동하는 역할만 한다.
      • 다시 커밋하면 원상태와 동일한 상태가 된다.
    • mixed : 기본 값.

        $ git reset --mixed {commitID}
        $ git reset {commitId}
      

      Untitled

      • 리셋한 후, 스테이지 상태까지 복원하지 않는다.
      • 작업 내용은 워킹 디렉터리(커밋 전)로 이동한다.
      • 원 상태로 돌아가려면, 다시 add 후 commit 하여야 한다.
    • hard : 실제 파일이 삭제된 이전 상태로 복원.

        $ git reset --herd HEAD~
      

      Untitled

      • 워킹 디렉토리 내용도 함께 삭제 된다.
      • 이전 커밋을 막 마친 상태로 복귀한다.
  • reset --soft 명령어를 통해 몇 단계 뒤로 이동한 뒤, 커밋하면 뒤에 있던 커밋 2개가 합쳐져 새로운 커밋으로 바뀐다. 이런 식으로 작업을 하나의 커밋으로 합칠 수 있다.
  • 스테이지 리셋
    • 스테이지 영역에 올라갔던 파일을 다시 unstage 상태가 되도록 스테이징을 취소 할 수 있다.

        $ git reset {fileName} // HEAD를 돌린다. 
        $ git reset {commitId} {fileName} // HEAD 대신 특정 커밋도 사용 가능.
      
  • 작업 취소
    • 수정 작업을 완전히 취소하려면 워킹 디렉토리와 스테이지 상태를 모두 제거하여 마지막 커밋 상태로 되돌려 놓아야 한다. 리셋할 때의 시점을 현재 HEAD 기준으로 하면 해당 시점의 수정 작업을 전부 삭제할 수 있다.

        $ git reset --head HEAD
      
  • 병합 취소
    • 리셋은 병합된 브랜치도 취소할 수 있다.

        $ git reset --merge HEAD~
        // 이전 병합 커밋을 리셋.
      
  • 주의할 점
    • 저장소를 외부에 공개했거나 공유 중이라면, 주의해서 리셋을 사용해야 한다.

리버트

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

Untitled

$ git revert HEAD // 헤드가 가리키는 커밋 리버트
$ git revert {commitId} // 특정 커밋 리버트
$ git revert {commitId} .. {commitId} // 특정 커밋부터 ~ 특정 커밋까지 리버트
  • 리버트는 한 번에 커밋 하나만 취소할 수 있다.
  • 병합 취소
    • 리버트를 이용하여 병합한 커밋을 취소 할 수 있다.

        $ git revert --mainline 숫자 병합커밋ID
        // mainline 옵션은 병합을 취소한 후, 체크아웃 되는 브랜치를 표시한다.
      
  • 리버트는 새 커밋을 추가하기 때문에 이력이 복잡해지지만, 공개 저장소의 경우 리셋이 불가능 하기 때문에 리버트를 자주 이용 한다.

© 2024. Chiptune93 All rights reserved.