본문 바로가기
JAVA 웹개발 - 코드프레소

Git 형상관리 2

by 녕나 2022. 1. 18.

현재 코드프레소에서 진행하고 있는 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도 바뀐 브랜치를 가르킴

HEAD가 이제 feature-login 브랜치를 가르킴

  • 현재 feature-login 브랜치에서 새롭게 commit 3를 만들면 main 브랜치의 최신커밋은 Commit 2가 되고, feature-login 브랜치의 최신커밋은 Commit 3가 된다

master 브랜치의 최신커밋과 feature-login 브랜치의 최신커밋이 달라지게됨

  • 다시 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 브랜치의 최신 커밋을 모두 이용해서 병합함

3-Way Merge 후 상황

Git 브랜치 충돌

  • 두 개의 브랜치를 병합할 때 만약 같은 파일에 대해서 다른 점이 있다면 conflict(충돌)이 발생되고 고쳐야지만 병합이 가능하다

MainService.java 라는 같은 파일에 대해 코드가 달라서 충돌 발생

  1. 직접 merge 하거나
  2. mergetool 이용 가능
    1. git mergetool

mergetool 사용중

  • conflict 해결 이후에는 똑같이 git add . 및 git commit 을 통해 merge commit을 만들어준다면 다음과 같은 그래프가 완성됨

master가 최신 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