[Git] Git 협업 시 충돌 해결
A와 B 두 명이서 협업을 하고 있다고 하자.
A는 101까지 작업을 진행하고 커밋 및 원격 저장소에 push 했고, B는 101까지 진행된 작업을 pull 받아서 이어서 작업을 진행했다.
이후 A와 B는 각각 이어서 작업을 진행해 102A - 103A / 102B - 103B 까지 작업했고, B는 103B 까지 작업한 내용을 커밋 후 원격 저장소에 push 했다.
이후 A가 103A까지 작업한 내용을 커밋 후 원격 저장소에 반영하려면 원격 저장소의 최신 변경사항 (103B) 을 로컬 저장소로 가져온 후 103A 관련 작업을 커밋해야 한다.
git pull origin master 명령어를 통해 원격 저장소의 변경 사항을 가져올 수 있는데...
A와 B가 동일한 파일의 같은 부분을 수정하고 각각 커밋했다면 충돌이 발생해 이 부분을 해결해 줘야 한다.
여기서는 A가 103A 까지 작업한 내용과 원격 저장소에 반영된 103B의 내용 중 같은 파일의 같은 부분에 대한 수정이 발생해 Git 이 이를 자동으로 병합할 수 없어 충돌이 발생했다.
각 시나리오별 해결 방법은 아래와 같다.
1. 변경사항 커밋 후 pull
로컬에서 작업한 변경사항을 먼저 커밋한 후 원격 저장소의 변경 사항을 가져오는 방법이다.
로컬에서의 작업이 아직 끝나지 않았고 원격 변경사항과의 충돌을 원하지 않는다면 다른 방법을 사용하자.
git add <파일명> \ git commit -m "메세지" \ git pull origin master
명령어를 순서대로 사용하자.
이후 git pull origin master 명령어를 수행하면 된다.
여기서 앞서 말한 동일 파일의 같은 부분을 수정해서 발생하는 문제가 발생할 수 있는데
Git은 충돌이 발생한 파일에 <<<<<<< / ====== / >>>>> 마크를 추가해 충돌이 발생한 부분을 쉽게 식별할 수 있도록 도와준다.
A와 B의 변경사항 중 어떤 것을 유지할지, 두 변경사항을 어떻게 통합할지를 결정해 충돌을 해결한 후 git add \ git commit \ git push 를 수행하자.
2. stash 후 pull
현재의 변경사항을 임시로 저장한 후 원격 저장소의 변경사항을 가져오는 방식으로, 로컬에서의 변경사항이 완료되지 않았거나 원격 저장소의 변경사항을 먼저 확인하고 싶을 때 사용하는 방법이다.
git stash 또는 git stash push -m "메세지"
명령어를 사용해 현재의 변경사항을 임시 저장하자.
현재 변경사항을 커밋하지 않고 임시로 보관함을 의미한다.
이후 git pull origin master 명령어를 수행하면 되는데, 1번과 마찬가지로 오류가 발생할 수 있다.
git pull을 수행하면 원격 저장소의 최신 변경사항을 로컬 저장소의 현재 상태와 병합하게 되는데, 여기서 충돌이 발생할 수 있다.
git status 명령어로 현재 변경된 파일 목록을 확인해 추가로 처리해야 할 변경사항을 반영한 후 다시 pull 하면 해결된다.
git pull에 성공했다면 git stash pop 또는 git stash apply 명령어로 이전에 임시 저장했던 변경사항을 다시 적용할 수 있다.
git stash를 여러 번 수행했다면 git stash list 명령어로 현재 stash된 모든 항목을 확인하고 특정 stash 항목을 적용하자.
역시 git stash에서 충돌이 발생했다면 하나하나 수정해주면 된다.
모든 작업이 완료됐으면 커밋 후 원격 저장소에 103A 내용을 반영하자.
3. 변경사항 덮어쓰기
로컬에서 작업한 내용을 무시하고 로컬 저장소의 내용을 원격 저장소의 마지막 상태로 리셋하는 방법이다.
git reset --hard origin/master
명령어를 사용해 로컬 내용을 밀고 원격 내용으로 덮어쓴다.
위의 방법을 사용해 원격 저장소에 반영된 최신 변경사항과 로컬에서 작업한 내용을 문제 없이 병합할 수 있다.
'Solutions' 카테고리의 다른 글
[SQL Server] 지원하지 않는 TLS 버전 설정 (1) | 2024.06.05 |
---|---|
대용량 파일 업로드 처리 (30GB) (1) | 2023.12.03 |
[JavaScript] Shadow DOM 다루기 (0) | 2023.11.22 |
[Vue] map 함수와 Vue3의 반응형 시스템 (0) | 2023.11.16 |
디렉토리 구조 탐색과 이미지 메타데이터 저장 (0) | 2023.09.17 |
댓글
이 글 공유하기
다른 글
-
대용량 파일 업로드 처리 (30GB)
대용량 파일 업로드 처리 (30GB)
2023.12.03 -
[JavaScript] Shadow DOM 다루기
[JavaScript] Shadow DOM 다루기
2023.11.22 -
[Vue] map 함수와 Vue3의 반응형 시스템
[Vue] map 함수와 Vue3의 반응형 시스템
2023.11.16 -
디렉토리 구조 탐색과 이미지 메타데이터 저장
디렉토리 구조 탐색과 이미지 메타데이터 저장
2023.09.17