본문 바로가기

디버깅/Git

[Git] eclipse Git에서 Pull 에러 (checkout conflict with files : ~~)

반응형


위 에러는 여러 환경, 혹은 협업을 하면서 충분히 일어날 수 있는 상황인데

요약하자며 내가  Commit하기전에  Pull을 안받았거나, Pull을 받을때 이미 HEAD와 소스가 다를때 주로 발생합니다. (Repository HEAD 상황과 내 로컬 상황이 달라서 발생)

말그대로 파일의 소스가 충돌이 난다는 것..


Eclipse에서 Pull을 받을때 경고창을 열어보면 어떤 파일이 Conflict이 나는지 파일을 다 하나씩 보여줍니다.

 'Checkout conflict with files : ~~~ (file 경로)'  


기본적으로 Git Pull 명령어는 Pull = Fetch + Merge 이기 때문입니다.

Fetch는 Remote의 소스를 내려 받는 것이고..

Merge는 쉽게 말해 Remote와 소스가 같으면 상관이 없지만.. 다를 경우 Conflict (충돌)이 발생하고.. 서로 다른 부분을 합치던지 혹은 Remote와 Local 소스 중 올바른 방향을 사용자가 잡아주는 과정을 말합니다.

=> 즉 merge의 뜻처럼 여러 갈래중에 어디로 갈지 정한다. 그런뜻 인거죠



해결 방법 1. Merge

okky에 나와있는 해결방법을 고대로 따라하면 해결을 할수가 있었는데.


1. 에러라고 알려주는 ~~ 경로의 파일을 확인하고 찾아가서 commit 하고. (따로 내용을 변경하지 않아도 됩니다)

2. Pull을 시도하고, 이클립스에서는 Merge Tool을 이용해 변경점을 코드에 반영합니다. 로컬의 소스와 HEAD소스를 같이 반영 시켜놓는데, 둘중 사용할 코드만 남겨서 다시 Commit + Push 합니다. (이 경우 Merge를 하게 되는거죠)

 

git bash에서는 다음 명령어를 이용해도 됩니다.


git reset --hard HEAD git pull 


git reset을 이용한 것인데요. 현재 프로젝트의 변경 사항을 reset처리한 뒤 master branch를 pull을 하는 것입니다.

=> 쉽게 말해 원격의 소스 상태를 로컬에 덮어씌워서 해결하는거죠.


해결 방법 2. Compare With HEAD로 해결 (직접 코드 비교)

Merge하기가 너무 귀찮고.. 개인 프로젝트로 해보니 HEAD로 따라가는 경우가 대부분이라 찾아낸 방법입니다.
프로젝트 우클릭 -> Team ->   Synchronize WorkSpace -> Conflict Mode (빨간색 양쪽 화살표) 충돌나는 파일을 찾고

Project Explorer에서 해당 파일을 우클릭 -> Compare With - HEAD Revision

말그대로 HEAD와 현재 로컬 소스를 비교합니다. HEAD의 코드를 따라갈 것일 경우 바뀐 부분을 고쳐줍니다 (간단하게 클릭하면 반영이 되죠)
충돌난 파일을 비슷한 방법으로 해결하고 Pull

이 방법도 귀찮긴한데.. 같은 파일을 두번씩 Commit해서 Merge하는게 귀찮으면 요방법이 조금 낫죠..
=> 이 방법은 Eclipse 툴에 있는 Compare With HEAD를 이용해 수동으로 Merge하는 것과 같은거죠

몇달써보니 다 귀찮네요.  Git을 배워서   SourceTree 같은 GUI 툴을 쓰세요. 하단 링크는 매우 기초적인 Git에 관한 글입니다




참고 출처 

https://okky.kr/article/387486

http://blog.naver.com/PostView.nhn?blogId=iamfreeman&logNo=220329671423

http://felixblog.tistory.com/84


반응형