현재 코드프레소에서 진행하고 있는 JAVA 웹개발 커리큘럼에 참여중에 있습니다.
그 중 Git 형상관리 2에 대한 학습내용을 적어보고자 합니다.
Git 형상관리 1보다 확실히 좀 더 복잡해지고 어려워졌습니다. Git에 대해 자세한 공부를 처음 해봤는데 생각보다 헷갈리는 점이 많고 외워야할 커맨드도 몇 개 있어서 정신 바짝차리고 공부해야겠습니다.
Git 브랜치
- 본래의 소스코드로 부터 파생한 독립적인 작업공간
- 최신 커밋을 가리키는 포인터 역할
git 다양한 브랜치들 - HEAD: 현재 브랜치를 가리키는 포인터
- HEAD 가 main을 가르키면 현재 작업브랜치가 main 이라는 뜻
- HEAD 가 가르키는 브랜치의 변동은 현재 작업브랜치의 변동과 같음
master(main)은 최신커밋(Commit 2)를 가르키고, HEAD는 현재 작업브랜치 master(main)을 가르킴 - 각각의 브랜치는 최신커밋을 가르키게 되고, HEAD는 현재 작업브랜치는 가르킴
Git 브랜치 이동
- git checkout <브랜치이동> 으로 현재 작업브랜치를 변경하면 HEAD도 바뀐 브랜치를 가르킴
- 현재 feature-login 브랜치에서 새롭게 commit 3를 만들면 main 브랜치의 최신커밋은 Commit 2가 되고, feature-login 브랜치의 최신커밋은 Commit 3가 된다
- 다시 master 브랜치로 돌아와서 새롭게 커밋을 하면 master와 feature-login 이라는 가지 모양이 만들어지게됨
git 브랜치 병합
1. 기준이 되는 브랜치로 이동
2. git merge <기준브랜치에 합칠 브랜치>
Fast-forward Merge
- Master 브랜치에 issuwe 브랜치를 병합하면 아래처럼 이루어진다. 아래와 같은 병합을 Fast-forward
3-Way Merge
- 이번엔 master와 feature-login을 병합해보자. master commit 포인터를 옮기는 것만으로 병합이 되지 않기 때문에 3-way 필요
- 두 브랜치의 공통 부모 커밋, master 브랜치의 최신커밋, feature-login 브랜치의 최신 커밋을 모두 이용해서 병합함
Git 브랜치 충돌
- 두 개의 브랜치를 병합할 때 만약 같은 파일에 대해서 다른 점이 있다면 conflict(충돌)이 발생되고 고쳐야지만 병합이 가능하다
- 직접 merge 하거나
- mergetool 이용 가능
- git mergetool
- conflict 해결 이후에는 똑같이 git add . 및 git commit 을 통해 merge commit을 만들어준다면 다음과 같은 그래프가 완성됨
Git Tag
- 특정 시점(의미있는)의 소스코드 정보를 커밋에 기록(태깅)
- 의미라는 것은 프로젝트마다 다름..
- 예전 커밋에도 tag 가능
- git tag -a <태그명> -m <태그메세지>
명령어
- git branch <브랜치이름>
- <브랜치이름>으로 branch 생성
- git checkout <브랜치이름>
- 현재 작업브랜치를 <브랜치이름>으로 변경
- git branch -d <삭제할 브랜치>
- 브랜치 삭제
- git tag -a <태그명> -m <태그메세지>
- 현재 브랜치의 최신 커밋에 tag
질문
git의 브랜치 이해를 위한 실습 part-1에서는 branch를 생성한 직후는 branch가 최신 커밋을 가르킨다고 나와있는데
part-3에서는 issue 브랜치를 생성한 직후에 issue브랜치가 아무것도 가르키지 않는다고 나와있어서 헷갈립니다.
'JAVA 웹개발 - 코드프레소' 카테고리의 다른 글
Spring Boot 웹 개발 입문 (0) | 2022.02.03 |
---|---|
Clean Code란 무엇인가? (0) | 2022.01.25 |
자바 프로그래밍 2 (0) | 2022.01.21 |
자바 프로그래밍 1 (0) | 2022.01.17 |
Git 형상관리 1 (0) | 2022.01.12 |