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

깃 (Git)

[Git] Troubleshooting 3 - 테스트 서버 충돌

피그브라더 2020. 1. 8. 22:01

실서버 브랜치가 아닌 테스트 서버에서 충돌이 발생하는 경우에 대한 이슈.

 

1. 문제 상황

내가 브랜치 A에서, 다른 사람이 브랜치 B에서 작업하는데 둘 다 같은 부분인 X를 건드렸다고 해보자. 이 상황에서 브랜치 B가 먼저 테스트 서버 브랜치에 병합이 되었다면, 나중에 브랜치 A를 테스트 서버에 병합하려 할 때 충돌이 발생한다. 왜 그럴까?

 

브랜치 A와 테스트 서버 브랜치를 병합하는 것이므로 그 두 개의 브랜치만 놓고 생각해 보자. 브랜치 A와 테스트 서버 브랜치는 둘 다 X를 건드렸기 때문에 충돌이 발생하는 것이다. 테스트 서버 브랜치는 X를 건드리지 않고 가만히 있지 않았느냐고 물을 수 있다. 하지만 테스트 서버 브랜치에는 브랜치 B가 병합되어 있는 상태고, 이는 마치 테스트 서버 브랜치에서 누군가 X를 건드리고 커밋을 한 것과 같은 효과인 것이다.

 

2. 해결

그러면 어떻게 충돌을 해결해야 할까? 브랜치 B 혹은 브랜치 B를 조상으로 가지는 임의의 브랜치를 가져와서 브랜치 A에 병합을 시킨 뒤, 브랜치 A를 테스트 서버 브랜치에 병합시키면 된다. 예를 들어 브랜치 B가 실서버 브랜치에까지 이미 병합이 되었다면 실서버 브랜치를 가져와서 브랜치 A에 병합을 시키면 된다. 또는 브랜치 B 자체를 가져와서 브랜치 A에 병합을 시켜도 된다. 그렇게 하면 현재의 브랜치 A는 브랜치 B를 조상으로 가지는 상태가 되기 때문에 테스트 서버 브랜치에 병합을 시도할 때 충돌이 발생하지 않게 된다. 이는 마치 브랜치 B에서 추가적인 작업을 하고 다시 테스트 서버에 병합을 시킨 것과 같은 효과이기 때문이다.

 

3. 결론

나와 같은 부분을 작업하여 충돌을 발생시킨 그 브랜치를 조상으로 가지게끔 적절하게 병합을 수행해주면 된다.