[Github] Merge한 PR 되돌리기

Git을 활용하면서 개발을 하다보면, 특히 함께하는 동료들이 많을 때 많이 겪는 상황이 있습니다. 바로 앞서 간 다른 Branch와 작업 중인 Branch와 Merge를 해야 하는 상황입니다. 이런 경우 보통 Merge를 하게 되는데요. 특정한 경우 Merge를 적용하지 않고 진행할 경우가 있습니다. 또한, 다른 Branch와 혼동해서 잘못 Merge를 하는 경우도 발생합니다. 이럴 땐 어떻게 해야할까요?

문제 상황

개발자 A는 개발을 진행하기 위해 특정 Branch를 가져왔습니다. 작업을 완료하고 PR(Pull Request)만 올리고, 작업을 완료하고자 했습니다. PR을 올리고, 개발자 검토가 끝났고, Merge를 진행했습니다. 하지만 배포 후 실제 서비스에서 결함을 발견했고 빠르게 해당 Merge를 돌려야 하는 상황이 생기게 됩니다.

해결방법

위와 같은 상황은 충분히 많이 나올 수 있는 상황입니다. 그렇다면 어떻게 해결할 수 있을 까요?

대표적인 해결 방법 중 하나는 Revert를 실행하는 방법이 있습니다.

다행히 Github에서는 이미 Merge한 PR을 Revert 시켜주는 버튼이 있습니다.

image
[Github] Merge한 PR 되돌리기 6

Merge한 Branch는 삭제를 통해 관리할 수 있으며, Revert는 언제든지 할 수 있도록 활성화되어 있습니다.

이 버튼을 눌러서 Revert를 시도해봅니다. Revert을 실행하면 앞선 커밋을 되돌리는 하나의 commit을 만듭니다. 여기서 중요한 것은 우리가 Revert를 한 이유입니다. 특정 커밋의 내용을 바꾸고 싶다면 해당하는 commit을 알아야 합니다.

돌아가고 싶은 commit 찾는 방법

방법은 두 가지가 있습니다.

  1. Repository 페이지에서 commit 번호를 클릭하고 full commit verison을 확인합니다.
  2. 터미널에서 git log 명령어로 내가 돌아가고 싶은 commit을 확인합니다.

아래 이미지는 1번 째 방법을 위한 commit 번호를 확인하는 화면입니다.

image 1
[Github] Merge한 PR 되돌리기 7

되돌리고 싶은 커밋의 코드를 누르면 full commit version을 알 수 있습니다.

image 2
[Github] Merge한 PR 되돌리기 8

이것을 복사해서 리셋을 해줍니다.

두 번째 방법은 아래와 같이 git log 명령어를 통해 돌아가고 싶은 commit을 확인합니다.

image 3
[Github] Merge한 PR 되돌리기 9

git log를 보면 commit 옆에 full commit code가 있습니다. 이걸 가져와서 다음 단계로 넘어갑니다.

commit을 찾았다면 아래와 같은 명령어로 돌아가서 Reset을 해줍니다.

git checkout <branch-name>
git reset --hard <commit code>
git push -f origin head

위와 같이 명령어를 입력하게 되면 특정 초기화하고 싶은 commit을 제거 한 후 커밋이 되는 걸 알 수 있습니다.

추가적으로 작업할 것이 있다면, 코드를 작성하고 commit을 하면 되겠습니다.

이미 배포 혹은 Merge 된 코드를 되돌리는 방법은 간단합니다.

당황하지 않고 Revert를 적용하고 나서 잘못된 commit을 찾아 제거 한 후 원상복구를 한다면 처리할 수 있습니다. 도움이 되시길 바랍니다.

[github] git commit 하나로 합치는 방법

참고자료

https://velog.io/@codesusuzz/Git-실수로-Merge한-Pull-Request-되돌리기

Leave a Comment