안녕하세요. IT 엘도라도 에 오신 것을 환영합니다.
글을 쓰는 것은 귀찮지만 다시 찾아보는 것은 더 귀찮습니다.
완전한 나만의 것으로 만들기 위해 지식을 차곡차곡 저장해 보아요.   포스팅 둘러보기 ▼

깃 (Git)

[Git] Troubleshooting 2 - 원격 서버 revert

피그브라더 2020. 1. 8. 21:53

실수로 실서버에 적용한 내용을 되돌리기 위해 Revert 작업을 수행하던 과정에서 겪었던 혼란.

 

1. 문제 상황

실서버 브랜치에서 갈라져 나온 A 브랜치에서 작업을 했다고 가정하자. 이때 A 브랜치에서 작업이 완료되었는데 실수로 테스트 서버 브랜치가 아닌 실서버 브랜치로 병합을 시켰다고 해보자. 그러면 우선 실서버 브랜치에서 Revert 브랜치를 만들어서 실서버 브랜치로 그걸 다시 병합시켜야 한다. 그래야 실서버에 적용된 A 브랜치의 작업 내역이 그대로 원상 복구될 것이다.

 

하지만 이렇게 한다고 해서 끝이 아니다. 이후 QA(Quality Assurance) 등의 과정을 통해 추가 개발 요구 사항을 전달받을 수도 있는데, 기존의 A 브랜치에서 추가 작업을 하고 실서버 브랜치에 병합을 시키면 충돌이 발생하기 때문이다. 왜 그럴까? 다음과 같이 생각해 보자.

 

A 브랜치를 실서버 브랜치에 (실수로) 병합시킨 이후, 우리는 Revert 브랜치를 따로 만들어서 그것을 실서버 브랜치에 병합을 시킴으로써 작업 내역을 되돌려 놓았다. 이것은 마치 어떤 다른 사람이 실서버 브랜치로부터 또 다른 브랜치 B를 파서 A 브랜치와 같은 부분에 대한 작업(다시 되돌리는 작업)을 한 후 실서버에 병합을 시킨 것과 같다. 이는 곧 A 브랜치와 B 브랜치가 같은 부분에 대해 작업을 했음을 의미하기 때문에 수정 사항을 반영하기 위해 A 브랜치를 실서버 브랜치로 병합시키려 할 때 충돌이 발생하는 것이다.

 

2. 해결

그러면 어떻게 해야 옳은 방법일까? 현재 실서버 브랜치는 Revert Pull Request를 생성하고(Revert 브랜치가 생성되고 이를 실서버 브랜치에 병합을 시키기 위한 Pull Request) 병합을 진행함으로써 A 브랜치의 작업 내역이 되돌아간 상태이다. 이때, 그 Pull Request에 대한 Revert Pull Request를 또다시 생성해야 한다. 그러면 또 다른 Revert 브랜치가 생성되는데, 이 브랜치는 A 브랜치의 모든 작업 내역들이 한 뭉텅이로 존재하고 있게 된다. 그러면 이제부터는 기존의 A 브랜치를 완전히 폐기하고, 그렇게 새로 만들어진 Revert 브랜치에서 추가 작업을 진행하면 된다. 이렇게 하면 기존 작업 내용을 포함하여 수정 사항까지 반영한 작업 내용들을 충돌 없이 실서버 브랜치에 병합시킬 수 있게 된다.

 

3. 결론

원격 서버에서 Revert를 수행했다면, 이후의 추가 작업은 Revert 브랜치를 다시 한번 만든 후 그곳에서 작업을 해야 한다.