상황

팀 Github : organization repository 사용
나 : 팀 Github에서 Fork를 따서 개인 repository에서 작업 후, 팀 Github으로 PR을 날림
팀원 : 팀 Github repository를 clone해 작업 후, 팀 Github으로 PR을 날림

 

상황 발생 원인 순서

요약

더보기

내가 {작업 branch}에서 작업한 내용을 {팀 develop branch}에 merge하고 해당 작업 branch에서 작업하고 있었음.

팀원이 내가 작업 중이던 파일의 패키지 경로를 변경해 같은 파일이 수정후 {팀 develop branch}에 merge

내가 {작업 branch}에서 작업한 내용을 마치고 {팀 develop branch}에 merge하려고 했음 -> 충돌 발생

 

1. 나의 {작업branch}에서 'a.java' 수정 ---PR merge---> {팀 develop branch}

2. 팀원 {작업branch}에서  'a.java' 수정 ---PR merge---> {팀 develop branch}

3. 나의 {작업branch}에서 'a.java' 수정 ---PR merge--->충돌<--- {팀 develop branch}

 

 

1. 내가 {작업 branch}에서 작업하고 팀 Github에 PR을 merge한 것이 {팀 develop branch}반영됨. -> 이후 {작업 branch}에서 계속 작업하고 있었음.

 

2. 팀원이 refactoring목적으로 파일의 패키지 경로를 변경뒤 PR을 merge해 {팀 develop branch}에 반영됨

[변경 전] domain>service>ProductService.java -> [변경 후] application>service>ProductService.java

 

3. 나는 작업을 완료하고 {작업 branch}의 변경사항을 PR을 날린뒤 {팀 develop branch}에 merge하려고 함.

-> 상황 발생

 

해결 방법

1. [view command line instructions] -> click

2. 'step1'에서 제시한 git 명령 차례대로 수행

git checkout -b {새로운 branch} develop

develop을 {새로운 branch}에 복사한 후,  {새로운 branch} checkout

 

git pull {저장소 주소} {작업 branch}

{작업 branch} 최신 변경사항을 가져와서 현재 로컬 브랜치(앞서서 checkout을 했으니, 여기선 {새로운 branch} )에 merge하는 명령어

= {작업 branch} 최신 변경사항을 {새로운 branch}에 merge

 

3. 충돌 해결

오류 코드 수정

파일을 IDE로 열어서 패키지 경로를 수정하고, 없어진 파일을 복구.

-> 우리는 작업하던 파일의 패키지 경로를 옮겨서 생긴 충돌이었음.

-> 각자 충돌 원인에 맞게 해결하면 됩니다.

 

Server 실행 후 API 테스트

팀원이 QueryDsl 사용중 QEntity를 못 찾는 오류가 있었지만 merge해 테스트 API가 작동하지 않는 문제 해결

 

변경 사항 commit

이때 당시 내가 작업한 commit message

'bug: Git conflict'

 

4. 'step2'에서 제시한 git 명령 차례대로 수행

git checkout {작업 branch}

{작업 branch} : '충돌이 발생한 PR에서 출발 branch'로 이동

 

git merge --no-ff {새로운 branch}

 

{작업 branch} & {새로운 branch}, 두 브랜치를 병합(Merge)할 때 Fast-forward 병합을 방지하고,

병합 커밋(Merge Commit)을 강제로 생성하는 명령어

 

병합 커밋 내용을 작성하는 화면이 나오면 -> ':q'를 입력하고 빠져나오면 됨.

 

이때 당시 병합 커밋 내용

'Merge branch 'Hany-Kim-feat/trial-kafka' into feat/trial-kafka'

 

git push origin {작업 branch}

작업 branch에 변경사항 push -> 충돌이 발생한 PR을 확인하면 commit 후 merge한 내용 반영되어 있음.


회고

당시에 우리팀은 PR을 3명이상 승인해야 merge할 수 있는 Rule이 있었는데,

덕분에 review를 꼼꼼히 하다가 원인을 미리 인지하고 있을 수 있었다.

 

PR 리뷰당시 conflict가 나타날 것을 미리 인지하고 있어서 원인을 분석하는데 오랜 시간을 들이지 않을 수 있었다.

 

당시에는 web에서 수동 conflict정도만 수정하면 되겠지 했지만,

처음 command line에서 해결해야 하는 것에 당황스러웠다.

 

이것 저것 시도하면서 git commit 내용을 삭제해 원상복구를 반복하면서

git에서 제시한 해결방법 흐름을 파악할 수 있었다.

 

오늘도 성장했다!

 


 

  • 유용하지만 조심해야할 git 명령
git reset --hard HEAD~1

# 가장 최근 커밋 1개 삭제
# git reset --hard HEAD~{삭제할 갯수}
# merge한 내역은 commit이 아니다. = 삭제할 갯수에 포함하면 안된다.
# 하나씩 조심히 주의하면서 지우자. 지우고 확인하고 반복하자
# 백업 branch를 하나 파두자

git push origin {반영할 branch} --force

# 삭제 후 반영

 

참고한 블로그

 

git conflict - command line으로 해결하기

다른 팀원이 공동 저장소에 올린 작업물을 내 저장소로 가져오려고 fetch를 했더니 충돌이 발생했다.

velog.io

 

반응형

Spring Cloud Config 란?

  • 분산된 환경에서 중앙 집중식 설정 관리 제공

특징

  • Config 서버
    • 중앙에서 설정 파일을 관리하고 각 서비스에 제공
  • Config 클라이언트
    • Config 서버에서 설정을 받아서 사용하는 서비스
  • 설정 갱신
    • 설정 변경 시 서비스 재시작 없이 실시간으로 반영
반응형

Cloud Gateway 란?

  • Spring Cloud에서 제공하는 API 게이트웨이
  • MSA에서 필수
  • Neflix Zuul과 유사한 기능 제공

특징

  • 루팅 및 필터링
    • 요청을 받아 특정 서비스로 라우팅
    • 필요한 인증 및 권한 부여를 수행
  • 보안
    • 외부 요청으로부터 애플리케이션을 보호
    • 보안 정책 적용
  • 효율성
    • MSA에서 필요한 요청 처리 및 분산 환경의 관리를 효율적으로 수행
반응형

+ Recent posts