브랜치에 여러가지 버전을 올린 후 이전 커밋으로 브랜치를 되돌릴 때 사용합니다.
돌아간 커밋 내역 이후의 커밋 히스토리들은 초기화합니다.
기존에 push가 된 상태에서 reset
을 사용한 후, 다시 push를 하면 로컬 저장소의 최신 히스토리와 원격 저장소의 최신 히스토리가 다르기 때문에 에러가 발생합니다. 강제로 push를 해야 되지만, 혼자 쓰는 브랜치에서만 사용하는걸 추천하며, 여러 명이 사용하는 브랜치에서는 사용하면 안 됩니다.
이미 push된 커밋을 되돌리고 싶은 경우는 reset
대신 revert
를 사용하는 것을 추천합니다.
$ git reset <mode> <commit hash>
<aside>
💡 reset mode
--soft
: 지정한 커밋 이력 이후 변경 사항은 로컬에 stage 상태로 유지하고 커밋은 리셋
--mixed
: 지정한 커밋 이력 이후 변경 사항은 로컬에 unstaged 상태로 유지하고 커밋은 리셋
--hard
: 지정한 커밋 이력 이후 변경사항은 다 버리고 지정한 커밋으로 리셋
</aside>
만약 로컬에 commit만 한 경우에는 reset을 사용할 수 있습니다. 하지만 원격 저장소로 push된 경우 reset을 사용하게 되면, reset 하고자 하는 커밋 이력으로 돌아간 다음 해당 커밋 이후의 커밋 히스토리들이 전부 삭제됩니다.
때문에 작업을 마치고 commit, push를 하게 되면, 로컬 저장소에 있는 커밋 히스토리와 원격 저장소에 있는 히스토리가 달라 Error가 발생합니다.
그렇기 때문에 여러 명이 원격 저장소를 다루는 협업에서 reset
사용은 지양하는 것이 좋습니다. 만약 사용을 원한다면 혼자만 이용하는 브랜치에서만 사용을 권장합니다.
위와 같은 Error를 방지하며 push된 커밋 이력을 되돌리고 싶은 경우, revert
를 사용합니다.
revert는 특정 커밋 이력을 되돌리는 작업도 하나의 커밋으로 간주하여 기존의 히스토리는 남겨둔 상태로 새로운 커밋 히스토리를 추가하는 방식입니다.
$ git revert <commit hash>