2023. 1. 22. 01:14ㆍgit
<요약>
내 컴퓨터 폴더와 깃허브 폴더를 합칠 때 "둘 중 어느 폴더의 코드를 취해도 에러가 나는 부분에서" conflict가 일어나고,
conflict가 발생한 부분은 일일이 합쳐주어야 합니다.
git pull 은 원격저장소(ex. 깃허브) 의 내용을 현재 로컬 저장소(=내 컴퓨터 폴더)에 합칩니다.
합칠 때 어느 저장소의 코드(더 정확히는 commit)를 취해야 할 지 모르겠는 경우 충돌이 발생합니다.
바로 예시를 들어서 설명해볼게요!
저와 제 친구가 협업 중인데, 제 친구가 깃허브에 기존의 파일을 수정해서 올렸습니다.
그래서 깃허브에는 아래 파일이 저장되어 있고,
int main(){
print("hello");
printf("github code");
return 0;
}
현재 제 컴퓨터에는 아래 파일이 저장되어 있습니다.
int main(){
printf("hello");
printf("my computer code");
return 0;
}
전 깃허브에 있는 변경사항 받아오고 싶었기에 git pull을 입력했습니다.
그러면 git pull은 실패하고 아래 에러 메세지를 만나게 됩니다. (현재 파일이름 : 협업.c)
Auto-merging 협업.c
CONFLICT (content): Merge conflict in 협업.c
Automatic merge failed; fix conflicts and then commit the result.
컴파일러가 충돌을 해결하고 commit을 하라고 합니다.
충돌을 해결하러 로컬 저장소에 있는 협업.c에 들어가보면 아래처럼 코드가 바뀌어 있게 됩니다.
int main(){
printf("hello");
<<<<<<< HEAD
printf("my computer code");
=======
printf("github code");
>>>>>>> origin/master
return 0;
}
두 파일이 어떻게 달라 충돌이 일어났는 지 보여주도록 코드가 바뀌었습니다.
이렇게 해석하면 됩니다.
<<<<<<< HEAD
내 컴퓨터 코드
=======
깃허브 코드
>>>>>>> origin/master
우리는 두 코드 중 한 코드만 남겨야 합니다.
깃허브 코드를 남겨야 겠다고 판단해서 제 컴퓨터에서 아래처럼 코드를 수정합니다.
int main(){
printf("hello");
printf("github code");
return 0;
}
충돌을 해결하였으니, 아래 코드로 commit을 진행합니다.
커밋 메세지에 밀도있는 설명을 적어주는 것도 잊지 말아요!
git add 협업.c
git commit -m "깃허브코드로 바꿔서 충돌 해결"
이 과정이 끝났다면 다시 git pull을 해주면 충돌 없이 잘 받아올 수 있게 됩니다.
'git' 카테고리의 다른 글
[git] git pull이 안되는 경우 (0) | 2023.01.12 |
---|