Git - merge, rebase

Hyeon Woohyeon·2022년 6월 12일

Git

목록 보기
6/13
post-thumbnail

feat. 얄코 - 얄코님의 강의와 참고자료 활용

📌 branch 합치는 방법

✏️ merge

두 브랜치를 커밋에 이어 붙임.

  • 브랜치 사용내역을 남길 필요가 있을때 적합한 방법 (히스토리가 남음)
  • 브랜치에서의 변화된 내용들을 한꺼번에 적용

✏️ rebase

브랜치를 다른 브랜치에 이어 붙임.

  • 브랜치 자체를 대상 브랜치로 옮겨 붙이는 것 (히스토리가 한줄)
  • 이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 것이 좋음

💻 merge로 합치기

✏️ add-coach 브랜치를 master 브랜치로 merge

  • master 브랜치로 이동
  • 병합
git merge add-coach

💡 master 에서 한 내용과 add-coach 에서 한 내용이 master가 모두 가지게 됨.

merge 는 하나의 새로운 커밋이므로 reset 으로 되돌리는 것이 가능하다.

  • 사용이 끝난 add-coach 브랜치 삭제
     git branch -d add-coach

💻 rebase로 합치기

✏️ new-teams 브랜치를 master 브랜치로 rebase

  • new-teams 브랜치로 이동
    🚫 merge 에서는 master에서 했지만 rebase 반대로 new-teams에서
  git rebase master

new-teams 에서의 작업 내용이 master 이후로 이어 붙여짐 (master 내용이 중간에 삽입됨)

  • 현재 master 브랜치는 뒤쳐져 있는 상황
  • master 브랜치로 이동 후 new-teams의 시점과 맞추어줌.
  git merge new-teams
  • 사용하지 않는 new-teams 브랜치 삭제

📌 Conflict 해결하기

❗️ 브랜치 간 충돌

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

💻 임의로 충돌 만들기

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

  git branch conflict-1
  git branch conflict-2

2. master 브랜치

  • Tigers의 managerKenneth로 변경
  • Leopards의 coachNicholas로 변경
  • Panthers의 coachShirley로 변경
  • 커밋 메시지: Edit Tigers, Leopards, Panthers

3. conflict-1 브랜치

  • Tigers의 managerDeborah로 변경
  • 커밋 메시지: Edit Tigers

4. conflict-2 브랜치 1차

  • Leopards의 coachMelissa로 변경
  • 커밋 메시지: Edit Leopards

5. conflict-2 브랜치 2차

  • Panthers의 coachRaymond로 변경
  • 커밋 메시지: Edit Panthers

💻 merge 충돌 해결하기

  • master 브랜치로 이동

  • git merge conflict-1 병합 시도 시 충돌 발생

  • 충돌 발생시 VSCode에서 어떤 것으로 할 것인지 선택할 수 있게 된다.

  • Accept Incoming Change 선택 (conflict-1 브랜치의 내용 선택)

    💡 위 처럼 충돌이 한 개가 아니라 여러개 이거나 당장 충돌 해결이 어려울 경우 아래 명령어로 merge 중단
    git merge --abort

  • 해결이 가능하면 충돌하는 부분을 수정하고 git add .git commit 으로 병합 완료

    merge를 중단 하지 않는 한 커밋 메시지를 따로 입력하지 않고 git commit을 하게 되면 자동으로 병합 커밋 메시지가 써져있고 커밋이 완료 된다.

💻 rebase 충돌 해결하기

  • conflict-2 브랜치로 이동

  • conflict-2 에서 git rebase masterrebase 시도 시 충돌 발생

    💡 merge 는 conflict 해결을 한 번에 모든 커밋에 대해 수행할 수 있지만,
    rebase 는 커밋마다 따로따로 conflict를 해결해주어야 한다.

  • git status 확인하기

    • 현재 leopards.yaml 파일에 대해 두 브랜치에서 건드리려고 한다.
    • Accept Incoming Change 선택
    • 💡 당장 충돌 해결이 어려울 경우 rebase 중단 git rebase --abort

  • 해결 가능시

    • 충돌 부분을 수정 후 git add .
    • git rebase --continue
  • 충돌을 모두 해결할때까지 계속 반복

    • 💡 두 마디 커밋을 rebase 했지만, 두 번째 충돌해결에서 master 브랜치의 내용을 선택 했으므로 커밋으로 추가할 필요없이 한 개만 추가 된 모습
  • git switch master로 이동 후 git merge conflict-2를 해주면 최신화가 된다.

  • 사용하지 않는 브랜치 제거 (conflict-1 conflict-2)

0개의 댓글