만일 calculator.py에 다른 함수 기능을 넣고 push를 했다고 상황을 가정해보자. 근데 갑자기 회사에서 그 기능은 추가 하지 않을 것이라고 한다. 그러면 우리는 어떻게 해야할까? → 그러면 square 함수를 지우고 그냥 다시 커밋을 하면 될 것이다. 근데 여기서 이 동작을 한 번에 해주는 git 커맨드가 있다.

스크린샷 2022-08-26 오후 4.05.42.png

그것은 바로 git revert라는 커맨드이다. revert는 되돌리다,복귀하다 라는 뜻을 가지고 있다. 이 뒤에 작업을 되돌리고 싶은 커밋의 아이디를 써주면 된다. revert를 하면 해당 커밋에서 했던 작업을 거꾸로 되돌리고 그걸 다시 커밋하게 된다.

커밋 히스토리를 살펴보고 제일 가장 최근에 작성했던 add function 커밋의 앞 4자리를 git revert 뒤에 입력해준다. 그러면 이런 화면이 뜨게 된다.

스크린샷 2022-08-26 오후 4.07.43.png

커밋 메시지가 자동으로 입력되어있으니 :wq를 입력해주고 저장한다. 그러면 새로운 커밋이 로컬에 생긴다. 그리고 다시 cat calculator.py를 입력해서 보면 square함수가 사라진 것을 볼 수가 있다.

스크린샷 2022-08-26 오후 4.08.47.png

좌라란~ ^^ 그리고 다시 git history를 확인해보자.

스크린샷 2022-08-26 오후 4.09.23.png

다시 git history를 확인해보면 우리가 전에 올렸던 add square function이 지워지진 않은 것을 볼 수가 있다. 단지 git revert라는 커맨드를 써서 함수를 추가한 작업을 되돌리는 커밋을 새로 한 것 뿐이다. 그럼 사람들은 이에대해 궁금한 점이 생길 것이다.

아니그러면 어차피 square 함수를 추가하기 직전에 했던 커밋으로 reset을 하면 되는거 아닌가? 만약 우리가 로컬 레포에서만 작업 중이라면 그렇게 해도 되지만 리모트 레포에서 작업 중이라면 그렇게 하면 안된다.

스크린샷 2022-08-26 오후 4.12.09.png

상황을 보자면 add square function 함수를 올렸을 당시 상황은 이랬을 것이다. 하지만 만약 reset을 한다면

스크린샷 2022-08-26 오후 4.12.48.png

로컬레포에서 master브랜치와 head브랜치 모두 현재커밋의 그 직전 커밋으로 이동하게 된다. 만일 이렇게 되면 git push를 시도할 수가 없다. 이유는 리모트 레포에 더 최신 커밋인 add square function이 있기때문에 git pull을 받으라고 할 것이다.

하지만 git revert를 사용해서 로컬레포의 커밋이 한 단계 더 나와있게 된다면 push를 해도 아무 문제 잘 없이 된다. push를 하고나면 오른쪽 사진의 모습을 갖게 된다.

스크린샷 2022-08-26 오후 4.14.48.png

스크린샷 2022-08-26 오후 4.15.32.png