2 minute read

💡 해당 내용은, 생활코딩 영상을 기반으로 작성하였습니다.

브랜치 병합하기

병합 방법 2가지 : Merge vs Rebase

Merge

  • git checkout feature -> git merge master
  • Master Branch 작업 내용과 Feature Branch 작업 내용이 각각 base로 부터 진행되다가 feature branch로 합해짐

    Rebase

  • git checkout feature -> git rebase master
  • history가 일렬로 나아감 : Master Branch 작업 내용 -> + -> Feature Branch 작업 내용
  • 다른 사람과 공유하지 않은 커밋 작업들에 대해서만 진행해야함

Merge & Rebase 비교하기

공통점

  • 병합 과정을 거친 최신 커밋 내용이 동일하다.
  • 즉, base -> Master Branch + Feature branch -> feature branch

    차이점

  • 커밋 히스토리 전개 방식
    • Merge : 히스토리가 병렬로 진행되어 버전 히스토리 보기가 어려움
    • Rebase : 히스토리가 일렬로 진행되어 히스토리 보기가 쉬움
  • 난이도
    • Merge : 비교적 쉽고, 안전함 (초보 권장)
    • Rebase : 어렵고, 위험함

Merge & Rebase 로그 확인

13b79f2 (HEAD - master) M2

  • git rebase master : rb branch의 조상은 base (643c662)였는데, rebase 후에는 M2 Master의 최신 커밋을 조상으로 함
    d2c09df R1
  • git rebase master : rb branch의 조상은 base (643c662)였는데, rebase 후에는 M2 Master의 최신 커밋을 조상으로 함
  • git merge rb
    • master 쪽으로 rb의 커밋내용을 가져오는데,
    • 지금 상황에서는 master이 rb에 포함된 상황이라 Fast Forwarding 방식으로 Master 브랜치가 rb 브랜치가 위치한 곳으로 빠르게 이동하게 됨 57623bd (HEAD - master, rb) R2

Rebase 충돌 다루기

충돌내기

  • 임시 저장소의 R1과 초기 R2의 소스코드 차이점만을 가지고 있는 Fetch 라는 형태의 정보가 임시 저장소에 저장됨. -> 그리고 R1 & 후기 R2 의 패치 저장 -> R2 & R3의 패치가 저장됨 -> 임시 저장소에 보관되어 있는 R1의 패치가 M1에 Merge됨 b3e50c6 (rb) R3

f1.txt 때문에 충돌난 모습

error could not apply a22c82e  R1

❗ rebase conflict 해결 방법 ❗

  • git status : 무슨 파일 때문에 충돌났는지 확인
  • vim f1.txt’ > git add f1.txt` : 해당 파일 열어 확인 후 충돌난 부분 수정하기
  • git status : 수정 후 확인하게 되면 rebase 충돌이 해결된 것 확인 가능 interactive rebase in progress; onto 49b7592
  • git rebase --continue : rebase 를 다시 진행함 (detached HEAD 667€276) R1
  • 또 충돌 > 충돌난 부분 수정 > git add f1.txt > git rebase --continue
  • 해결된 모습
    • rb는 master 브랜치의 작업 내용을 포함할 뿐만 아니라, 본인 브랜치 결과를 병합한 내용 모두 포함함
    • 즉, rb의 히스토리를 가지치기 없이 깔끔하게 한줄로 보여줌 ba9c172 (HEAD -› rb) R3

추가 명령어 모음

  • git checkout -b 브랜치명 : 브랜치를 생성함과 동시에 체크아웃하는 명령어
  • git log —decorate —all —oneline —graph : 모든 브랜치의 로그를 한 줄의 그래프로 보여주는 명령어
  • git commit -am 커밋메시지 : git addgit commit을 동시에 해줌
  • git rebase master : rb 브랜치의 최초 커밋의 베이스(base)를 master 브랜치의 최초 커밋으로 베이스를 바꾸겠다(rebase)라는 뜻

맥북 Tip

  • ; 를 눌러 quote > 상태가 되었을 때 : Control + C 를 누르면 탈출
  • 백틱 (`) 누르기 : 원화 표시(₩)가 있는 곳을 영어 상태에서 누르면됨

Leave a comment