[GIT]reset과 revert의 차이
오늘 타 팀의 꼬여버린 커밋을 해결하면서 reset과 revert를 사용했다.
오랜만에 쓰다보니 기억이 잘 안나서 예전에 쓴 포스팅를 봤는데 내용이 부족해서 보완을 해봤다.
reset과 revert의 차이
- revert: 커밋을 취소한다고 커밋을 남기며 되돌림.
- reset: 커밋을 작성한 걸 아예 되돌림. 이전 커밋기록은 삭제.
- 프로덕션에 올라간 커밋은 reset을 하면 안된다. 히스토리가 안 남기때문.
로그 | 추천 사용상황 | |
---|---|---|
reset | 생성X | 로컬 저장소에서 작업시 사용 추천 |
revert | 생성O | 원격저장소에 이미 올렸을때 사용 추천 |
취소 기록을 남기면서 커밋취소하는 revert
1 | git revert 커밋넘버 --옵션 |
만약 커밋넘버가 c,b,a순으로 있고 a번으로 되돌리고 싶다면 아래 명령어를 입력하면 된다.
1 | 1. 커밋순서 확인하기 |
이제 c,b커밋은 취소되고 a커밋만 남게 된다.
그럼 c,b커밋에 staged되었던 파일들은 어떻게 될까?
staging Area전인 working directory로 가게 된다!
아무도 모르게 커밋을 취소하는 reset
reset은 주의사항이 있다!
- 주의: reset은 로컬 저장소에서만 실행할 것
원격저장소에 올라간 뒤 reset을 실행하면 이전 커밋 내역들이 전부 삭제된다.
만약 다른 개발자들과 함께 작업했는데 reset을 한 걸 모른채로 커밋을 하면 삭제한 커밋들이 다시 살아난다.
따라서 미리 공지를 하거나 git revert사용을 추천
한다.
1 | git reset 커밋넘버 --옵션 |
가장 최근 commit 한개 취소하기
가장 최근 커밋을 삭제하기 위해선 가장 최근 커밋을 가리키는 HEAD가 어디있는지 중요하다.
1 | 1. HEAD위치 확인 |
옵션
- soft: 취소한 커밋안의 작업 파일들을 staging단계로 돌린다. 따라서 add되어있다.
- hard: 취소한 커밋안의 작업 파일들을 working directory단계로 돌린다. 따라서 add되어있지도 않다.