인프런 - 제대로 파는 Git & Github - by 얄코
브랜치 간 충돌, 그것을 어떻게 해결하는지 알아보자
지금까지는 서로 다른 파일 또는 같은 파일이라도 다른 부분을 서로 다른 브랜치들이 수정했기 때문에 그것들을 merge를 하거나 rebase를 해도 별 문제가 발생하지 않았어. 그런데 만약! A브랜치 B브랜치에서 같은 파일에 같은 줄에 서로 다른 내용을 입력해 버리면(충돌) 이것들을 병합할 때 컴퓨터는 그 둘 중에 어떤 것을 채택해야 할 지 모르기 때문에 충돌이 발생한다.
그래서 컴퓨터는 이걸 어떻게 해결해야 할 지 모르기 때문에 사용자가 직접 해결을 해야만 한다.
파일의 같은 위치에 다른 내용이 입력된 상황
conflict-1
, conflict-2
브랜치 생성
main
브랜치
conflict-1
브랜치conflict-2
브랜치 1차conflict-2
브랜치 2차git merge conflict-1
로 병합을 시도하면 충돌 발생!
(main으로 merge를 하기 위해선 main브랜치로 이동해서 진행해야 하는거 잊지말자)
git status
확인충돌이 없었을 경우 바로 commit이 될꺼야
하지만 지금의 경우는 이런 화면이 떠
이건 VSC의 기능인데, 현재 브랜치(HEAD)에서는 이렇게 말하는데 너가 merge하고 싶은 브랜치에서는 ~~하게 말한다. 라고 표시하는거야
충돌이 났을때 충돌이 난 부분들이 여러 개 있고 그것들을 다 찾으려면 에디터에서 전체검색을 해서 <<<<
을 표시하면 충돌이 난 부분들만 찾을 수 있어!!
둘 중 선택하고 싶은걸 선택해도 되고, 내가 따로 입력해도 돼!
🧨 지금은 이렇게 충돌 내용이 간단해서 둘 중 하나를 채택하면 되는데 충돌 부분이 너무 많아서 당장 어찌하지 못할 경우에는 명령어를 입력해서 중단할 수 있어!
당장 충돌 해결이 어려울 경우 아래 명령어로 merge
중단
❤ git merge --abort
해결 가능 시 충돌 부분을 수정한 뒤 git add .
, git commit
으로 병합 완료
merge는 충돌 해결이 commit 한번이면 해결 돼!
conflict-2
에서 git rebase main
으로 리베이스 시도하면 충돌 발생
git status
확인merge로 충돌을 해결할 때는 하나의 커밋으로 끝나 근데 rebase는 달라! 커밋들을 옮기는 형식! 즉 브랜치 안에 있는 모든 커밋마다 충돌 과정을 따로따로 차례로 해결해줘야해
(rebase니까 대상브랜치인 conflict-2로 이동해서 진행하는거 잊지마)
당장 충돌 해결이 어려울 경우 아래 명령어로 rebase중단
git rebase --abort
해결 가능 시
git add .
git rebase --continue
--> 이유는 이번 한번으로 충돌이 끝나지 않을 수도 있어서!main은 뒤쳐져있기 때문에 main을 최신 것으로 바꿔줘야지 (merge를 통해!)
main
에서 git merge conflict-2
로 마무리
conflict-1, conflict-2 브랜치 삭제
다 사용한 브랜치는 제때 지워주어야 이것저것 쓸데없는 브랜치가 많아져서 혼란 겪을 일이 없어짐.
🎈 충돌이 발생했을 때 git status
를 통해서 해당 내용을 잘 확인해보자 !
내용을 보고 양 브랜치 모두에서 해당 내용을 수정하고 있구나~ 충돌 해결해야겠구나~ 이렇게 생각하고 충돌 내용 해결하자.
2.main 브랜치
3.to-merge 브랜치
4.to-rebase 브랜치
⭐️ 브랜치를 이동하며 파일 살펴보기
현재 브랜치로 병합
클릭💡 rebase는 충돌 가능시 CLI로 진행 권장
rebase는 소스트리로 하기에는 복잡해 → rebase
는 CLI로 진행 권장
conflict 브랜치 생성
main 브랜치
3.conflict 브랜치
5.conflict 브랜치 삭제
이제 깃헙에서 프로젝트를 공유하고 협업하는 방법에 대해 공부해보자.