git으로 코드를 관리하면서 가장 좋은 점은 이전에 했던 커밋을 되돌려서 이전 상태로 복구할 수 있다는 것이다.
분명 어제 이렇게 해주세요~ 해서 수정해서 push 했더니 다음주에 이전 버전으로 다시 원상복구 해주세요~ 하는 게 하루이틀이 아닌... git으로 코드 관리를 하길 정말 잘했다는 생각이 드는 요즘이다...🥹
원격 저장소에 push가 된 게 아니라면 git reset 이라는 명령어로 로컬에서 쉽게 커밋 이전의 상태로 되돌릴 수 있다. 하지만 원격 저장소에 push가 되었다면 과정이 조금 복잡해 진다.
1. 로컬에서 커밋 이전 상태로 되돌린 후 강제로 push하기
먼저 git log로 commit log를 확인한다.
git log
몇번째 커밋 전 상태까지 되돌리고 싶은지 확인을 했다면 git reset 명령어로 로컬에서 먼저 되돌려준다.
git reset --hard HEAD~1
이후 되돌려진 로컬을 원격 저장소에 강제로 push 해 준다.
git push -f origin master
-f 또는 --force 명령어를 추가하여 강제로 push 해 주면 된다.
-> 이렇게 하면 해당 원격 레포를 팀원 누군가 쓰고 있었다면 그 팀원이 push를 할 때 원격 저장소의 버전이 맞지 않기 때문에 충돌이 일어난다. 함께 쓰는 레포라면 팀원에게 확인을 꼭 해야 한다. (제발~)
2. 원격 레포에 히스토리 기록을 남기면서 되돌리기
git revert 명령어를 사용하면 revert 시킨 히스토리마저 원격 레포에 기록이 되기 때문에 함께 쓰는 레포라면 revert 명령어를 쓰는 것이 더 좋다.
똑같이 git log로 commit의 hash를 먼저 확인한 후 (git log를 입력했을 때 commit 옆에 뜨는 긴 문자열이 hash이다),
git revert "되돌릴 commit hash"를 입력 해 주면 된다.
git revert "되돌리고자 하는 commit hash"
이후 다시 commit, push를 해 주면 원격 레포에 revert 한 기록이 남으면서 revert 한 commit 시점으로 되돌아가게 된다.
git commit -m "revert commit hash"
git push origin master