git reset VS git revert

MiMi·2022년 8월 15일
0

❓트러블슈팅

목록 보기
2/2


오늘은 면접 때 질문받았던 git reset과 git revert의 차이점을 정리해보고자 한다.
먼저, 이 둘을 언제 쓰느냐?
내가 너무나 큰 버그를 만들어 도저히 고칠 수 없는 상태이거나, 이전 커밋으로 가고 싶을 때 사용한다. 하지만 잘못 건드리면 지금까지 개발한 것들이 다 증발해버리거나 더욱더 지옥으로 빠지게 될 수 있다. 그만큼 시간여행의 대가는 혹독하다.

Reset

reset은 특정 사건으로 되돌아가게 되는데 과거로 되돌아갔으니 이후의 커밋들은 모두 사라진다. 또한 과거로 돌아갔다는 이력이 사라져 깔끔하게 과거로 돌아갈 수 있다. 하지만 원격 저장소에 커밋 기록이 있다면 push 시 오류가 난다. --force를 사용해 강제 push도 가능하지만 이렇게 되면 이전 기록들이 강제로 날아가기 때문에 다름 사람들과 공유하고 있다면 절대 해선 안된다.
즉, reset을 사용하는 경우는 아래와 같다.

  • 혼자만 사용하는 브랜치일 경우
  • origin에 있지만 아무도 이 브랜치를 사용하지 않는다는 확신을 가지는 경우
    그 이외의 경우에는 revert를 사용한다.

사용 예시

  1. 커밋을 여러 개 한다.
git commit -m "1"
git commit -m "2"
git commit -m "3"
  1. git reset --option 돌아갈 커밋 입력
// 바로 이전 commit으로 돌림
git reset HEAD^
// 돌아간 커밋 이후의 변경 이력 모두 삭제 -> 2, 3번 커밋 반영 내용 모두 삭제
git reset --hard [1번commit hash]
// 변경 이력 모두 삭제, 변경 내용 남아있음 -> unstage 상태
git reset --mixed [1번commit hash]
// 변경 이력 모두 삭제, 변경 내용 남아있음 -> stage 상태
git reset --soft [1번commit hash]

Revert

revert는 reset과 다르게 특정 과거 커밋만 삭제한다. 또한 삭제했다는 기록이 남는다.

사용 예시

git commit -m "1번 커밋"
git commit -m "2번 커밋"
git commit -m "3번 커밋"

git revert [1번commit hash]

reset --soft, mixed와 동일한 결과를 가져오지만 이력은 Revert "..." 라는 메시지가 추가된다. 위처럼 명령어를 실행하면 1번 커밋 이후의 커밋들이 삭제되는 것이 아니라 1번 커밋에 해당하는 내용만 삭제된다. 또한, Revert "1번 커밋" 이라는 1번 커밋이 삭제되었다는 이력이 남게 된다.
만약 이력을 남기고 싶지 않다면 --no-commit 옵션을 추가하면 된다.

history 유지와 협업에 유리한 revert를 쓰는 게 더 좋은 것 같다.

참고문헌

profile
이제 막 입문한 코린이 -> 이전중 https://mimi98.tistory.com/

0개의 댓글