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 가 생김 )
'깃' 카테고리의 다른 글
Day61 - [Git]원격저장소 Repository 삭제 (0) | 2021.05.13 |
---|---|
Day61 - [Git]Stash (0) | 2021.05.13 |
Day60 - [Git] 깃 되돌리기 , 브렌치 , 원격 저장 명령어 (0) | 2021.05.11 |
Day60 - [Git]사용자 재등록 (0) | 2021.05.11 |
Day60 - 깃 (다운, 설치, 사용, 저장) (0) | 2021.05.11 |