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