위 에러는 여러 환경, 혹은 협업을 하면서 충분히 일어날 수 있는 상황인데
요약하자며 내가 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로 해결 (직접 코드 비교)
몇달써보니 다 귀찮네요. Git을 배워서 SourceTree 같은 GUI 툴을 쓰세요. 하단 링크는 매우 기초적인 Git에 관한 글입니다
참고 출처
https://okky.kr/article/387486
http://blog.naver.com/PostView.nhn?blogId=iamfreeman&logNo=220329671423
http://felixblog.tistory.com/84
'디버깅 > Git' 카테고리의 다른 글
[Homebrew] Error: Failure while executing: git config --local --replace-all homebrew.private true (0) | 2018.04.10 |
---|---|
[Git] Repository 충돌시 git 삭제방법, git URL변경 방법 (2) | 2018.04.09 |
[Git] eclipse 에서 git push시 rejected-non fast-forward 에서 해결 (0) | 2018.01.02 |
[Git] push가 완료된 commit 여러개를 하나로 합쳐보자 (0) | 2018.01.02 |
[Git] STS, Eclipse에서 github 프로젝트 가져오기, clone하기 (스프링 프로젝트) (0) | 2017.12.20 |