[Git] Git reset & revert

한결·2023년 4월 14일
0

Github

목록 보기
10/14

Git reset

  • 시계를 마치 과거로 돌리는 듯한 행위
  • 프로젝트를 특정 커밋(버전) 상태로 되돌림
  • 특정 커밋을 되돌아 갔을 때, 해당 커밋 이후로 쌓았던 커밋들은 전부 사라짐
  • git reset [option] {commit ID}
    • 옵션은 soft, mixed, hard 중 하나를 작성
    • 커밋 ID는 되돌아가고 싶은 시점의 커밋 ID를 작성
  • 어느시점이 어느시점에 사라졌는지 tracking하기 어려움
    -> 버전관리 의미 상실
    -> 사용 지양하자

git reset의 세 가지 옵션

  • --soft
    • 해당 커밋으로 되돌아가고
    • 되돌아간 커밋 이후의 파일들은 Staging Area로 돌려놓음
  • --mixed
    • 해당 커밋으로 되돌아가고
    • 되돌아간 커밋 이후의 파일들은 Working Directory로 돌려놓음
  • --hard
    • 해당 커밋으로 되돌아가고
    • 되돌아간 커밋 이후의 파일들은 모두 Working Directory에서 삭제
      -> 따라서 사용 주의
    • 기존의 Untracked 파일은 사라지지 않고 Untracked로 남아있음

[참고] git reflog

  • git reset의 hard옵션은 Working Directory 내용까지 삭제하므로 위험할 수 있음
  • git reflog 명령어를 이용하면 reset하기 전의 과거 커밋 내역을 모두 조회 가능
  • 이후 해당 커밋으로 reset하면 hard 옵션으로 삭제된 파일도 복구 가능
  • 사실 사용은 지양함
    • 버전기록의 의미가 사라짐

Git revert

  • 과거를 없었던 일로 만드는 행위로, 이전 커밋을 취소한다는 새로운 커밋을 생성함 (수정했다는 새로운 커밋을 생성)
  • git revert {commit ID}
    • 취소하고 싶은 커밋 ID를 작성

git reset과의 차이점

  • 개념적 차이
    • reset은 커밋 내역을 삭제하는 반면, revert는 새로운 커밋을 생성함
    • revert는 Github를 이용해 협업할 때, 커밋 내역의 차이로 인한 충돌 방지 가능
  • 문법적 차이
    • git reset 5sd2f42라고 작성하면 5sd2f42라는 커밋으로 되돌린다는 뜻
    • git revert 5sd2f42라고 작성하면 5sd2f42라는 커밋 한 개를 취소한다는 뜻
      (5sd2f42라는 커밋이 취소되었다는 내용의 새로운 커밋을 생성함)

0개의 댓글