배경
같이 진행해야 하는 토이 프로젝트가 있었다. 인원은 두명이였고, 원활한 진행을 위해 git 에 프로젝트 폴더를 만들어 사용하기로 했다.
나는 git을 많이 사용하는 편이다. 그래서 몇가지 명령어에는 제법 익숙하다. 물론 팀플을 하면서 각자 브랜치를 이용하여 나눠 수정해본 적이 있었으나, 예전이기도 하고 ㅠ git 충돌 공포증 있나봐 .. 그럼에도 불구하고 해야GGGG
충돌 상황
다음은 실화를 바탕으로 한 충돌 후기이다.
- 갑과 을은 같은 프로젝트를 진행 해야 함
- 갑은 git에 repo에 프로젝트를 올림. (을도 이 repository 를 사용해서 수정해야 하므로!)
이 상황에서 에 병합 충돌(Merge conflicts) 위험이 생길 수도 있다. 왜일까?
- 을은 갑이 올려놓은 프로젝트를 git clone을 하여 프로젝트를 수정하기 시작.
- 갑은 먼저 프로젝트를 수정하고 add 후 commit , 그리고 push
- 을 역시 동시에 프로젝트를 수정하였음. add commit 후 push 를 했더니 오류 발생 👊
그와 동시에 을은 git pull 를 먼저 해야 하는 명령어를 보게 된다. 그래서 을은 터미널 창에 git pull 명령어를 입력하여 갑이 먼저 수정한 부분을 repository 에서 pull을 해온다. 이때 상황은 두가지로 나눠지게 된다.
- 같은 부분을 수정하지 않았으면 그냥 pull 하고, git add, commit, push 해주면 끝
- 하지만 같은 부분을 수정했으면 충돌이 발생! 그래서 갑이 수정한 부분을 반영할지 을이 변경한 부분을 반영해야 할지 선택해야 한다. 만약 을이 본인이 수정한 부분이 맞다고 생각하면 Current change 를 선택하면 된다. vscode 에서 플러그인을 설치하면 ui 로 다 잘 볼 수 있다. 선택한 후에 git add, commit(보통 나는 이때 merge라는 메시지를 남긴다), push 시켜주면 됨 :-)
결론
head는 을의 변경 사항(Current change)이고, master는 갑의 변경 사항(Incoming change)이다. 두 변경 사항 중 하나를 선택하면 된다.
느낀점
git 은 역시 똑똑해 😚...
출처: https://parksb.github.io/article/28.html