Conflict(충돌)는 서로 다른 브랜치에서 같은 파일의 같은 줄에 작업을 할 때 코드가 중복되어 발생하는 상태를 의미합니다. Git으로 프로젝트를 관리할 때 마주하게 되는 Conflict에 대해 직접 해보고 기록 해 보았습니다.
준비물
과정
cmd 사용 연습도 같이 해보았습니다.
1.디렉토리를 만들어줍니다. 그리고 해당 디렉토리로 진입합니다.
mkdir conflick재현
cd conflick재현
touch test.md
git init
git add .
git commit -m 'first'
git remote add origin '주소'
git push origin master
//1번 브랜치 생성
text.md 파일 수정
git add .
git commit -m '1번브랜치'
git branch 1번
git checkout 1번
git push origin 1번
//2번 브랜치 생성
text.md 파일 수정
git checkout master // 마스터로 넘어가서 브랜치를 생성한다.
git add .
git commit -m '2번브랜치'
git branch 2번
git checkout 2번
git push origin 2번
1번 pull request 완료 후 2번을 시도하면 Merge 버튼이 비활성화 된 것을 볼 수 있다.
맨 위 그림을 다시보고, 고쳐야 할 부분을 생각해보자.
github master랑 local(컴퓨터) master 내용이 다르다.
쉬운말로 풀면.
github master는 1번이 수정한 내용으로 변한 상태인데,
local에서는 '수정전 master 내용을 기억하고있는 상태에서 2번 브랜치 내용으로 바꾸자 '라고 한것이다.
이것을 이해 해야된다..!!
뭔가 이상하지 않나요? 그니까 git에서는 수정 못하겠다고 conflit가 발생한 것이다.
conflit 해결하기
진짜 간단하다. 현재는 branch 2번에 있다. 우선 master로 가고 pull부터해서 'github master'와 'local master'를 맞추자
git checkout master
git pull origin master
그 다음 다시 branch 2번에가서 master랑 병합하자
git checkout master
git merge master
vscode는 참 친절하다.
이렇게 어떻게 할꺼냐고 물어본다
'<<<<<<< HEAD' 위의 'Accept Current Change' 부터 하나씩 눌러보는 걸 추천한다
여기서는 ctrl + z로 전 상황으로 돌릴 수 있으니,
그리고 원하는 결과를 선택하고 다시 푸쉬한다.
git add .
git commit -m 'conflit solution'
git push origin 2번
다시 github에 들어가 보면,
병합할 수 있다.
후기
개발자로써 github은 필수고, conflit는 피할 수 없다고 들었다.
다른 사람들이 이 과정을 읽어보고 conflit를 이해 할 수 있으면 좋겠다.
vscode는 친절하게 콘뿔릭트 내역을 출력해주는군요! 콘뿔릭트 해결 못하는 빌런이 되지 않도록 저도 실습하러!!