git reset 명령어 정리


  • git reset 명령어에 대해서 공부하고 정리한 글입니다

reset

  • 특정한 커밋으로 모든 것을 초기화 시켜주는 명령어

  • 옛날 커밋으로 브랜치를 되돌리는 방법

  • 앞의 feat/b 기능 추가 커밋을 기준으로, 해당 커밋까지 현재 브랜치를 초기화 하고 싶은 경우

  • 소스트리 기준 되돌리고 싶은 커밋 - [오른쪽 버튼 - 이 커밋까지 현재 브랜치를 초기화] 한다(reset)

  • reset하는 방법에는 3가지가 있다

  • [Mixed] 모드

    • 작업 상태는 그대로 주지만 인덱스는 리셋

    • 아래 그림처럼 두번째 커밋 - 체리픽에서 추가했던 cherrypick.md변경 사항이 스테이지 아래로 튕겨 나온 것을 확인할 수 있다

    • 변경사항을 스테이지 아래로 두어서 다시 무엇을 스테이지 위로 Add할지 고민할 수 있다

    $ git reset HEAD~2
    # HEAD가 가리키는 커밋과 HEAD가 가리키는 이전 커밋, 두 커밋을 없앤다
    # 현재 HEAD가 가리키는 두번째 전의 커밋의 상태로 돌아간다
    
    $ git log
    
    $ git status
    # git history에서는 사라졌지만
    # 작업하고 있는 내용은 아직 워킹 디렉토리에 남아있는 것을 확인할 수 있다
    # git reset은 git reset --mixed와 같다
    # version history에서는 커밋을 삭제하지만 작업하고 있던 내용들은 워킹디렉토리에 옮겨놓는다
    
    
  • [Soft] 모드

    • 모든 로컬 변경 사항을 유지

    • [mixed]모드가 변경사항을 스테이지 아래두어서 무엇을 add할 지 정할 수 있다면, [soft]모드는 변경 사항을 스테이지 위로 위로 두어서 다시 당장커밋할 수 있다

    
    $ git reset --soft HEAD~2
    # HEAD가 가리키는 이전 커밋의 상태로 돌아간다
    
    $ git log
    # 커밋 사라진 것 확인
    
    $ git status
    # 작업하고 있던 내용들이 stating area에 있는 것을 확인할 수 있다
    
  • [Hard] 모드

    • 모든 작업 상태 내 변경 사항을 버린다. 지금 작업 공간에 상관없이, 예를 들어 몇개의 커밋을 추가했던지 간에 상관없이 깔끔하게 히스토리를 되돌린다
    
    $ git reset --hard HEAD
    # 내가 마지막으로 커밋한 이후에 수정한 모든 로컬 파일들을 초기화 한다
    # 포인터는 다시 HEAD로 초기화 된다
    
    $ git log
    
    $ git reset --hard HEAD~2
    # HEAD에서 두번째로 초기화
    
    $ git log
    # 커밋이 사라진 것 확인할 수 있다
    
    $ git status
    
  • reset을 사용해서 add 명령어를 취소하는 방법

    
    $ git reset HEAD
    # 현재 staging area에 있는 것들이 다시 워킹디렉토리로 이동한다 
    
    
  • reset을 사용해서 커밋을 취소하는 방법

    
    $ git reset HEAD^
    # 커밋하고 나면 워킹 디렉토리와 staging area가 아무것도 남지 않는다
    # 따라서 부모 커밋으로 reset 하면 커밋한 결과들이 다시 워킹디렉토리로 이동한다 
    
    
  • 소스트리 사용

    • 두번째 커밋 까지 hard 모드로 reset

    • feat/b 기능 추가 커밋 까지 hard 모드로 reset

    • feat/b 브랜치는 과거로 돌아간 것을 확인할 수 있지만 아직 원격 브랜치인 origin/feat/b 에는 두번째 커밋이 남아 있다

    • reset한 다음 원격 브랜치에도 반영하기 위해서는 푸시해야 한다

    • 다만 히스토리를 수정하는 푸시이기 때문에 [강제 푸시]를 해야한다

    • 강제 푸시는 나만 쓰는 브랜치에서 해야 한다.

    • 다른 사람이 함께 사용하고 있는 곳에서 사용하게 되면 히스토리가 꼬이게 된다


Reference









© 2020. by dkmqflx

Powered by dkmqflx