[git] git pull 후 발생하는 conflict 해결

2023. 1. 22. 01:14git

<요약>

내 컴퓨터 폴더와 깃허브 폴더를 합칠 때 "둘 중 어느 폴더의 코드를 취해도 에러가 나는 부분에서" 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