Git - 여러 branch 활용하기(4)

Chooooo·2022년 9월 24일
0

Git

목록 보기
7/15
post-thumbnail

인프런 - 제대로 파는 Git & Github - by 얄코


충돌 해결하기

브랜치 간 충돌, 그것을 어떻게 해결하는지 알아보자
지금까지는 서로 다른 파일 또는 같은 파일이라도 다른 부분을 서로 다른 브랜치들이 수정했기 때문에 그것들을 merge를 하거나 rebase를 해도 별 문제가 발생하지 않았어. 그런데 만약! A브랜치 B브랜치에서 같은 파일에 같은 줄에 서로 다른 내용을 입력해 버리면(충돌) 이것들을 병합할 때 컴퓨터는 그 둘 중에 어떤 것을 채택해야 할 지 모르기 때문에 충돌이 발생한다.

  • 그래서 컴퓨터는 이걸 어떻게 해결해야 할 지 모르기 때문에 사용자가 직접 해결을 해야만 한다.

  • 파일의 같은 위치에 다른 내용이 입력된 상황

상황 만들기

  1. conflict-1, conflict-2 브랜치 생성

  2. main브랜치

  • Tigers의 manager를 Kenneth로 변경
  • Leopards의 coach를 Nicholas로 변경
  • Panthers의 coach를 Shirley로 변경
  • 커밋 메시지: Edit Tigers, Leopards, Panthers
  1. conflict-1 브랜치
  • Tigers의 manager를 Deborah로 변경
  • 커밋 메시지: Edit Tigers
  1. conflict-2 브랜치 1차
  • Leopards의 coach를 Melissa로 변경
  • 커밋 메시지: Edit Leopards
  1. conflict-2 브랜치 2차
  • Panthers의 coach를 Raymond로 변경
  • 커밋 메시지: Edit Panthers

🎈 merge 충돌 해결하기

git merge conflict-1로 병합을 시도하면 충돌 발생!
(main으로 merge를 하기 위해선 main브랜치로 이동해서 진행해야 하는거 잊지말자)

  • 오류 메세지와 git status 확인
  • VSC에서 해당 부분 확인

충돌이 없었을 경우 바로 commit이 될꺼야
하지만 지금의 경우는 이런 화면이 떠

이건 VSC의 기능인데, 현재 브랜치(HEAD)에서는 이렇게 말하는데 너가 merge하고 싶은 브랜치에서는 ~~하게 말한다. 라고 표시하는거야

  • 그렇기에 둘 중에 무엇을 채택할 지 정해야해!

충돌이 났을때 충돌이 난 부분들이 여러 개 있고 그것들을 다 찾으려면 에디터에서 전체검색을 해서 <<<< 을 표시하면 충돌이 난 부분들만 찾을 수 있어!!
둘 중 선택하고 싶은걸 선택해도 되고, 내가 따로 입력해도 돼!

🧨 지금은 이렇게 충돌 내용이 간단해서 둘 중 하나를 채택하면 되는데 충돌 부분이 너무 많아서 당장 어찌하지 못할 경우에는 명령어를 입력해서 중단할 수 있어!

당장 충돌 해결이 어려울 경우 아래 명령어로 merge 중단
git merge --abort
해결 가능 시 충돌 부분을 수정한 뒤 git add ., git commit으로 병합 완료

merge는 충돌 해결이 commit 한번이면 해결 돼!


🎈 rebase로 충돌 해결하기

conflict-2에서 git rebase main으로 리베이스 시도하면 충돌 발생

  • 오류 메세지와 git status확인
  • VSC에서 해당 부분 확인

merge로 충돌을 해결할 때는 하나의 커밋으로 끝나 근데 rebase는 달라! 커밋들을 옮기는 형식! 즉 브랜치 안에 있는 모든 커밋마다 충돌 과정을 따로따로 차례로 해결해줘야해
(rebase니까 대상브랜치인 conflict-2로 이동해서 진행하는거 잊지마)

당장 충돌 해결이 어려울 경우 아래 명령어로 rebase중단
git rebase --abort

해결 가능 시

  • 충돌 부분을 수정한 뒤 git add .
  • 아래 명령어로 계속 (하나씩 커밋해주는거야)
    git rebase --continue --> 이유는 이번 한번으로 충돌이 끝나지 않을 수도 있어서!

    (아직 하나가 남았어)
  • 충돌이 모두 해결될 때까지 반복
    소스트리에서 두 마디짜리 브랜치를 rebase했는데 결과에는 한 마디만 추가된 이유는 충돌 해결 중 두번째 것에서는 current 즉 main브랜치 것을 채택했기 때문에 rebase가 의미가 없어졌으므로 커밋으로 추가할 필요가 없어졌기에 한 마디만 추가된거야.

main은 뒤쳐져있기 때문에 main을 최신 것으로 바꿔줘야지 (merge를 통해!)
main에서 git merge conflict-2로 마무리
conflict-1, conflict-2 브랜치 삭제

다 사용한 브랜치는 제때 지워주어야 이것저것 쓸데없는 브랜치가 많아져서 혼란 겪을 일이 없어짐.

🎈 충돌이 발생했을 때 git status를 통해서 해당 내용을 잘 확인해보자 !

내용을 보고 양 브랜치 모두에서 해당 내용을 수정하고 있구나~ 충돌 해결해야겠구나~ 이렇게 생각하고 충돌 내용 해결하자.


소스트리로 여러 브랜치 활용하기

1. 브랜치 만들고 merge, rebase 하기

  1. to-merge, to-rebase 브랜치 생성
  • 상단의 브랜치 버튼 클릭
  • 왼쪽의 브랜치 탭에서 클릭하여 이동

2.main 브랜치

  • Tigers의 manager를 Brenda로 변경
  • 커밋 메시지: Edit Tigers manager

3.to-merge 브랜치

  • Tigers의 coach를 Ruth로 변경
  • 커밋 메시지: Edit Tigers coach

4.to-rebase 브랜치

  • Tigers의 memebers에 Tyler 추가
  • 커밋 메시지: Edit Tigers members

⭐️ 브랜치를 이동하며 파일 살펴보기

  1. to-merge 브랜치 main으로 merge
  • main에 위치한 뒤 to-merge 브랜치를 우클릭하여 현재 브랜치로 병합 클릭
  1. to-rebase 브랜치 main으로 rebase
  • to-rebase에 위치한 뒤 main 브랜치를 우클릭하여 현재 변경 사항을 주 대상(main)에 재배치 클릭
  • main에 위치한 뒤 to-rebase 브랜치를 우클릭하여 현재 브랜치 병합 클릭
  1. main으로 이동 후 to-merge와 to-rebase 우클릭하여 삭제
  • merge되지 않은 브랜치의 경우 강제 삭제 체크박스 선택

merge 충돌 해결해보기

💡 rebase는 충돌 가능시 CLI로 진행 권장
rebase는 소스트리로 하기에는 복잡해 → rebase는 CLI로 진행 권장

  1. conflict 브랜치 생성

  2. main 브랜치

  • Tigers의 members에 Kim 추가
  • 커밋 메시지: Edit Kim to Tigers

3.conflict 브랜치

  • Tigers의 members에 Park 추가
  • 커밋 메시지: Edit Park to Tigers
  1. merge하여 충돌 해결해보기 (merge 할거니깐 main으로 이동해서 진행해야 하는거 잊지 않기)
    (충돌한 부분 VSC에서 채택한 후에 소스트리에서 커밋을 누르면 자동으로 commit 메세지가 작성되어 있으니 스테이지에 올린 후 커밋 누르면 제대로 merge하여 충돌 해결돼!)

5.conflict 브랜치 삭제

이제 깃헙에서 프로젝트를 공유하고 협업하는 방법에 대해 공부해보자.

profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글