24-Winter 3회차 모각코

YEEUN CHOI·2025년 1월 7일

목표

3회차: 25/01/07 19:00 ~ 22:00
장소: ZOOM
계획: 24년 동계 모각코

스터디 계획

스터디 주제 : branch(브랜치)

스터디 목표 : branch(브랜치) 학습하기

결과

branch

브랜치는 Git에서 특정 커밋을 가리키는 포인터임. 새로운 커밋을 할 때마다 브랜치는 자동으로 최신 커밋을 가리키게 됨. 브랜치가 '가리킨다'라는 표현을 사용하는 이유는 브랜치가 단순히 "포인터" 역할을 하기 때문임.

HEAD란?
HEAD는 현재 작업 중인 브랜치 또는 커밋을 가리키는 특수한 포인터임. HEAD를 통해 현재 어떤 브랜치에서 작업 중인지 확인할 수 있음.

예를 들어, HEAD가 현재 master 브랜치를 가리키고 있다면, 다른 브랜치(예: testing)로도 이동 가능함. 또한, 브랜치의 최신 커밋이 아닌 과거 커밋(예: 98ca9나 34ac2)으로 HEAD를 이동시키는 것도 가능함.

하지만 과거 커밋으로 HEAD를 이동하면 master 브랜치의 포인터와 HEAD가 떨어지게 되어 "Detached HEAD"(분리된 HEAD) 상태가 됨. 이 상태는 특정 커밋에서 작업하고자 할 때 발생함.

규칙

원격저장소는 여러 사람이 함께 작업하기 때문에 브랜치 규칙을 정하는 것이 일반적입니다. 간단한 규칙 예시입니다.

  1. master 브랜치에는 직접 커밋하지 않는다. (여러 사람이 동시에 작업하면 충돌이 생길 수 있음)
  2. 새로운 기능 개발 시 master 브랜치에서 새로운 브랜치를 생성한다.
  3. 새로운 브랜치의 이름은 feature/기능명 으로 하고, 한 명만 커밋을 올린다.
  4. feature/기능명 브랜치에서 기능 개발이 완료되면 master 브랜치에 병합한다.

예를 들어, feature/detail-page 브랜치에서 작업한 후 commit/push하면, 원격 저장소에 origin/feature/detail-page 브랜치가 생성됨. 여기서 origin/은 원격 저장소에 올라갔다는 것을 의미함.

branch 생성 명령어

Git 브랜치 관련 명령어 정리

명령어설명
git branch로컬 저장소의 브랜치 목록을 조회함. 표시된 브랜치 중 *가 붙어 있으면 HEAD가 해당 브랜치를 가리키고 있다는 뜻임.
git branch [-f] <브랜치명> [커밋체크섬]새로운 브랜치를 생성함. 커밋 체크섬을 제공하지 않으면 HEAD로부터 브랜치를 생성함. -f 옵션을 사용하면 기존 브랜치를 다른 커밋으로 강제 이동시킬 수 있음.
git branch -r원격 저장소의 브랜치 목록을 조회함.
git checkout <브랜치명>특정 브랜치로 이동(체크아웃).
git checkout -b <브랜치명> <커밋체크섬>특정 커밋에서 브랜치를 새로 생성하고, 그 브랜치로 체크아웃 진행. 예: git checkout -b hotfix master (master로부터 hotfix 브랜치 생성 후 체크아웃).
git merge <대상 브랜치>현재 브랜치와 대상 브랜치를 병합함. 병합 커밋이 새로 생기는 경우가 많음.
git rebase <대상 브랜치>현재 브랜치의 커밋들을 대상 브랜치 위로 재배치함.
git branch -d <브랜치명>특정 브랜치를 삭제함. 단, HEAD가 가리키고 있는 브랜치나 병합되지 않은 브랜치는 삭제 불가.

HEAD

  • HEAD는 현재 작업 중인 브랜치나 커밋을 가리킴.
  • 브랜치는 특정 커밋을 가리키는 포인터이기 때문에, HEAD는 현재 작업 중인 브랜치의 최신 커밋을 가리키는 역할을 함.
$ git log --oneline --graph --decorate
* 3d94a73 (HEAD -> main, origin/master, origin/main, master) add asynciotest

위 예제에서는 HEAD가 main 브랜치를 가리키고 있으며, 원격 저장소의 origin/main 브랜치도 같은 커밋을 가리키고 있음.

checkout 명령어 : 브랜치 이동

git checkout 명령어는 브랜치를 전환하거나 특정 커밋으로 코드를 되돌릴 때 사용됨.

브랜치 전환
새로운 브랜치는 보통 master 또는 main 브랜치에서 체크아웃한 이후 생성함. 예를 들어, master 브랜치를 기준으로 feature 브랜치를 생성하고, 해당 브랜치에서 작업한 수정 사항을 다시 master로 병합함.

$ git branch
* main
  master

$ git checkout master
Switched to branch 'master'

특정 커밋으로 되돌리기
git checkout 명령어를 사용해 특정 커밋으로 워킹 트리를 되돌릴 수 있음. 커밋 ID의 앞 7자리를 사용해서 이동하면 됨.

$ git checkout 8aa7e99
Note: switching to '8aa7e99'.

HEAD is now at 8aa7e99 init

이전 커밋으로 돌아가기
이전 커밋으로 돌아가려면 git checkout - 명령어를 사용하면 됨.

$ git checkout -
Previous HEAD position was 8aa7e99 init
Switched to branch 'master'

merge : 브랜치 병합

병합 종류

  • Merge commit(병합 커밋): 두 브랜치의 변경 사항을 합쳐 새로운 커밋을 생성함.
  • Fast-forward(빨리 감기): 병합 대상 브랜치의 변경 사항이 현재 브랜치의 변경 사항과 충돌 없이 바로 이어질 때 발생. 새로운 커밋이 생성되지 않음.
  • Conflict(충돌): 두 브랜치의 변경 사항이 충돌할 경우 발생. 수동으로 해결해야 함.

PR(Pull Request) : 브랜치를 합치는 예의바른 방법

PR은 브랜치를 병합하기 전 검토를 거치는 과정임. 예를 들어, master 브랜치에 코드를 병합하기 전에 동료가 내 코드를 검토할 수 있음. 협업 과정에서 자주 사용되며, 병합하기 전에 코드 품질을 유지하도록 돕는 역할을 함.

활동사진

개인 블로그 링크

0개의 댓글