[글을 쓴 배경]
개발자로서 git 충돌을 피할 수는 없다. 협업 과정에서 conflict를 경험을 자주 경험하였지만, 왜 충돌이 났는지, 해결방법이 무엇인지 정확히 알지 못한체 구글링이나 챗 GPT 도움으로 해결했었다. 그러다 보니 같은 실수를 반복하게 되는게 싫어서 이 글을 쓴다.
피할 수 없으면 즐겨보도록 하자..!
[충돌이 일어나는 이유]
충돌 원인은 정말 다양하겠지만, 모두 대비하기는 불가능하고 가장 대표적인 충돌 상황을 정리하겠다.
바로 동일 파일을 다른 브랜치에서 수정한 경우이다.
사실 아무리 다른 브랜치에서 작업을 하고 커밋이 꼬였다 하더라도, 서로 다른 부분만 코딩했으면 충돌이 나지 않는다..!
그러니 서로 커뮤니케이션을 통해 기능구현 분업을 확실하게 하는것이 제일 중요하다!
[충돌 상황 직접 시연]
준비 : 기본적인 main브랜치에서 파생된 user1/user2 브랜치를 생성하였다.
이제 user1 ,user2에서 각각 동일한 파일을 수정한 뒤 main에 병합시켜보겠다.
사실 가장 중요한 것은 같은 코드는 한사람만 구현하는 것이 제일 좋다. -> 여기서 협업과 팀원간 커뮤니케이션의 중요성을 또 느낀다..
-대표적인 git 충돌 나는 상황
바로 동일 파일을 다른 브랜치에서 수정한 경우이다.
User2에서 작업한 후 push -> main에 merge한상태.
하지만 User1은 User2에서 동일한 클래스 코드를 작업한지 모르고 자신도 작업함.
그 후 동일하게 push 후 ->main에 merge하려는 상태
이러한 경우 충돌이 발생한다.
[해결방법]
1.병합(merge):
- 당신의 브랜치 1에 main의 최신 코드를 병합한 후, 충돌을 미리 해결합니다.
- 이를 통해 당신의 브랜치가 main의 최신 코드와 동기화되고, 나중에 main에 병합할 때 충돌을 줄일 수 있습니다.
git checkout 브랜치1
git fetch origin
git merge origin/main
2.리베이스(rebase):
- 브랜치 1을 main 브랜치 위로 rebase하여, 브랜치 1의 작업을 main의 최신 변경 사항 위에 적용합니다.
- 이 방법은 깔끔한 병합 기록을 유지할 수 있습니다.
이제 merge나 rebase과정에서 충돌이 발생할 것이다.
Git은 충돌이 발생한 파일에 대해 수정할 수 있도록 친절하게 도와준다.
이제 선택할 수 있는 방법은
- 두 부분 모두 유지
- Head브랜치(현재 브랜치)내용 선택
- main 브랜치 변경사항 선택
<<<<<<< HEAD
user1 브랜치에서 수정된 코드
=======
main 브랜치에서 수정된 코드
>>>>>>> main
충돌부분을 수동으로 수정했다면 이제 드디어 마지막 merge단계가 남았다.
git add <충돌 해결된 파일>
git commit
git checkout main
git merge <브랜치명>
git push origin main
[결론]
Git에서 충돌이 발생했다고 해서 병합을 할 수 없는 것은 아니며,Git은 단지 "어떻게 수정할지 결정해달라"고 요청하는 것이니 쫄지마라
그리고 왠만하면은 동일한 부분을 같이 수정하는 일이 없도록 하자!
이미지 참고 : https://velog.io/@juno97/git-conflict-%EA%B3%BC%EC%A0%95
git conflict 과정(상세하게)
Conflict(충돌)는 서로 다른 브랜치에서 같은 파일의 같은 줄에 작업을 할 때 코드가 중복되어 발생하는 상태를 의미합니다. Git으로 프로젝트를 관리할 때 마주하게 되는 Conflict에 대해 직접 해보
velog.io
'Git' 카테고리의 다른 글
[Git] 협업에서의 git 사용법 (6) | 2024.01.04 |
---|---|
Git/Github 개념 및 사용법 (3) | 2023.11.23 |