[GIT] 브랜치와 Merge의 기초

브랜치의 기초

  1. 웹사이트 개발 진행 중
    • master 브랜치입니다.
  2. 새로운 이슈 발생
    • iss53으로 새로운 브랜치를 생성합니다.
    • $ git checkout -b iss53
  3. iss53 브랜치에서 작업
    • 로컬에서 작업 후 커밋을 합니다.
    • $ vim index.html
      $ git commit -a -m 'added a new footer [issue 53]'
  4. 핫픽스 발생
    • iss53 별도로 hotfix가 발생하여 먼저 해결합니다.
    • master 브랜치로 옮긴 후 hotfix 브랜치를 생성 후 해결합니다.
    • $ git checkout master
      $ git checkout -b hotfix
      $ vim index.html
      $ git commit -a -m 'fixed the broken email address'
  5. hotfix 브랜치를 master 브랜치에 merge
    • 이때, "Fast forward" 메시지가 나오는데, 이는 `hotfix` 브랜치의 커밋이 `master` 브랜치의 최신 커밋을 기반으로 했기 때문에 발생하는 빠른 전진(Merge)입니다.
    • $ git checkout master
      $ git merge hotfix
  6. hotfix 브랜치 삭제
    • hotfix를 master에 merge를 했으니 더 이상 필요 없는 hotfix 브랜치 삭제합니다.
    • $ git branch -d hotfix
  7. iss 53 처리
    • iss53 브랜치로 돌아가 작업을 계속합니다.
    • $ git checkout iss53

Merge의 기초

  • 위에서 했던 iss53 브랜치 작업이 끝나면 master 브랜치에 merge합니다.
  • $ git checkout master
    $ git merge iss53
  • 여기서 메시지가 `hotfix` 브랜치를 Merge할 때와 다릅니다. 현재 브랜치가 가리키는 커밋이 Merge할 브랜치의 조상이 아니므로 Git은 'Fast-forward’로 Merge하지 않습니다. 대신 Git은 각 브랜치가 가리키는 커밋 두 개와 공통 조상 하나를 사용하여 3-way Merge를 수행합니다.
  • 단순히 브랜치 포인터를 최신 커밋으로 이동시키는 것이 아니라, 3-way Merge의 결과를 별도의 커밋으로 만들고 해당 브랜치가 그 커밋을 가리키도록 이동시킵니다. 이런 커밋은 여러 부모를 가지는데, 이를 Merge 커밋이라고 부릅니다.

충돌의 기초

  • 가끔씩 3-way Merge가 실패하는 경우가 있습니다. 두 브랜치에서 동시에 같은 파일 부분을 수정하고 Merge하면 Git은 해당 부분을 자동으로 Merge하지 못하며 충돌(Conflict)이 발생합니다.
  • 이런 충돌이 일어날 때, Git은 충돌이 난 부분을 표준 형식에 따라 표시하고 해당 부분을 수동으로 해결해야 합니다. `git status` 명령으로 충돌이 일어난 파일을 확인할 수 있습니다.
  • 충돌이 일어난 파일은 unmerged 상태로 표시되며, 개발자는 해당 부분을 수동으로 해결해야 합니다. 충돌 해결 후 `git add` 명령으로 Git에 저장하고, `git commit` 명령으로 Merge를 완료합니다.

'GIT > Git 브랜치' 카테고리의 다른 글

[GIT] Rebase 하기  (0) 2024.02.13
[GIT] 리모트 브랜치  (1) 2024.02.13
[GIT] 브랜치 워크플로  (0) 2024.02.13
[GIT] 브랜치 관리  (1) 2024.02.13
[GIT] 브랜치란 무엇인가  (0) 2024.02.08