Day61 - [Git]깃의 comflict

2021. 5. 13. 02:57

이번에는 깃의 comflict 에 대해서 알아 봅시다

 

comflict

comflict 는 , 깃을 통해서 협업을 할 때 나타날 수 있는 에러 인데요

 

발생하는 이유는, 원격 저장소에 있는 파일이 최신화 되지 않았을 때 발생 합니다.

 

즉. 원격 저장소에 있는 파일들이 변한 상태 인데, 내 로컬 저장소에서도 원본 파일들이 변한 경우 입니다.

 

내 로컬 저장소에 있는 A.txt 의 파일이 위와 같이 있습니다. 그리고 이걸 push를 해서 원격 저장소에 똑같이 만들어 주었습니다.

그런데, 내가 아닌 다른 누군가가... 다른 파일을 추가를 했거나? A.txt 를 수정을 했습니다.

자 그러면 현재 상태는 어떻게 되죠?

일단 내 로컬 저장소에 있는 A.txt 파일과 원격 저장소에 있는 A.txt 가 다르죠?

 

그런데, 저는 이 사실을 모르고 A.txt 를 수정해 버립니다.

지금 이 상태는, 결국 원격 저장소와 내 로컬 저장소가 다른데, 원격 저장소에 있는 파일도 수정이 됐고, 내 로컬 저장소에 있는 파일도 수정이 된 상태죠?

 

이 상태에서 push 를 하면 comlict 에러가 발생이 됩니다.

 

해소 방법

이 complict 에러를 해결하기 위해서는, 로컬 저장소에 있는 변한 파일들 or 새로 생긴 파일들을 일단 commit 합니다.

그리고, 원격 저장소에 있는 파일들을 최신화 합니다 (pull or fetch 로 가지고 와서 merge)

 

pull 방법

아래와 같이 pull을 하게 되면, A.txt 파일이 변하게 됩니다.

git 이 알아서, 파일에 대한 것을 추가를 해줬죠?

 

원격 저장소에 변한 부분을 가져와서, 내가 변경한 부분과 구분 지어서 A.txt 를 수정 합니다.

 

보시면 ... <<<<<<<HEAD 와 ========= 사이에 있는게 제가 작성한 부분.

========= 와 >>>>>> bb8bebf........ 사이에 있는게 B 개발자가 작성한 부분. 입니다

 

그리고, 저는 둘 중에 맞다고 생각한 부분이라 던지, 알맞게 수정을 해서 다시 push를 합니다.

 

(단점 : 불필요한 commit log 가 생김 )

 

fetch 방법

아래와 같이 fetch 를 사용하게 되면, 원격 저장소에 있는 파일들이 FETCH_HEAD 브렌치에 저장이 됩니다.

그래서, 현재 master 브렌치에서는 파일들에 대해 딱히 변한게 없게 됩니다.

그리고, FETCH_HEAD 브렌치로 변경을 하면 !?

원격 저장소에 있는 수정된 파일이 되게 됩니다.

그리고, 해당 파일을 내 로컬 저장소에 있는 master 브렌치와 merge 를 해주면 됩니다.

 

방법은 , git switch -c <새로운 브렌치 이름> 을 하게 되면, 해당 브렌치로 옮겨가게 되고, merge 를 해줍니다.

이렇게, git switch -c <새로운 브렌치 이름> 을 사용하게 되면 새로운 브렌치가 생성이 되고, 해당 브렌치에 원격저장소에서 받은 파일들이 me 브렌치로 이동 됩니다.

 

이제 다시 master 브렌치로 이동해서 me 브렌치를 merge 해줍니다.

그러면 이렇게 또, A.txt 가 합쳐져 버리는데요, 이제 다시 알맞게 수정해서 push 를 해주면 됩니다.

 

※ 그리고, 이제는 me 브렌치가 필요 없으니, 삭제 해버리세요

 

(단점 : 불필요한 commit log 가 생김 )