[Git] 브랜치(Branch)

soma·2024년 3월 18일

Git

목록 보기
1/7
post-thumbnail

브랜치(Branch)

  • 하나의 코드 관리 흐름 ( 커밋에 대한 참조 )
  • 브랜치는 많이 만들어도 메모리나 디스크 공간에 부담되지 않음
$ git status
On branch main => ** [main] 기본 브랜치명
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean
** main은 레포지토리를 만들고 커밋을 하면 자동으로 생기는 브랜치

branch 사용법

✅ branch 생성

$ git branch [새 브랜치 이름]
** 새로 생성한 브랜치에서 작업한 내용은 main 브랜치에 영향을 주지 않음

✅ branch 조회

$ git branch  => 브랜치 조회
* mian        => 현재 위치한 브랜치
  [브랜치명1]
  [브랜치명2]
  [...]

✅ branch 삭제

$ git branch -d [기존 브랜치 이름]
Deleted branch [기존 브랜치 이름]

✅ branch 이동

$ git checkout [가고 싶은 브랜치 이름]
Switched to branch '[가고 싶은 브랜치 이름]'

$ git checkout [커밋 아이디]
// Detached HEAD 상태
* HEAD가 직접 커밋을 가리키거나, 브랜치를 가리키도록 할 수 있음
** Detached HEAD : HEAD가 특정 커밋을 직접 가리키는 상태
*** Detached HEAD 하는 이유는 과거의 특정 커밋에서 새로운 브랜치를 만들고 싶을 때 사용함

✅ branch 생성 + 이동

$ git branch -b [새 브랜치 이름]
Switched to a new branch '[새 브랜치 이름]'

✅ branch 병합

$ git checkout [브랜치명]  => 이동
Switched to branch '[브랜치명]'

$ git merge [합칠 브랜치명] 
Merge made by the 'ort' strategy.

💡 병합 시 conflict 해결

$ git merge [브랜치명]
Auto-merging [merge할 파일]
CONFLICT (content): Merge conflict in [merge할 파일]
Automatic merge failed; fix conflicts and then commit the result.
  1. conflict가 발생한 파일을 연다
  2. merge의 결과가 되었으면 하는 모습대로 코드 수정
  3. commit 하기
💡 여러 개의 conflict 해결
  1. 여러 개의 파일에서 conflict가 발생한 경우 파일 하나씩 conflict를 해결하고 git add [파일명] 커맨드로 하나씩 staging area에 올리거나
  2. 모든 파일들의 conflict를 해결하고 git add . 커맨드로 한번에 staging area에 올리고
  3. commit 하기

💡 conflict 발생 시 merge 취소

$git merge --abort

//머지 작업을 취소하고 이전 상태로 돌아감

Github Branch 연습하기!




상대 참조

$ git checkout C4^
  • 커밋 해시(아이디)를 다 입력하지 않아도, 식별가능할 정도로만 입력해도 됨
  • ^는 한 커밋 위로 움질일 수 있음
  • ~숫자는 여러 커밋 위로 올라갈 수 있음
  • 해시 또는 브랜치이름 또는 HEAD 모두 상대참조기호 앞에 올 수 있음



origin 이란?

git remote add origin https://github.com/soma0078/Math_Box.git

- remote : 리모트 레포지에 관한 작업을 할 때 쓰는 커맨드
- add : 새로운 리모트 레포지토리를 등록한다는 의미
- origin https~.git : https~.git 리모트 레포지토리를 origin으로 등록

remote repository에 있는 브랜치

git push -u origin main

- 현재 로컬 레포지토리에 있는 main 브랜치 내용을 origin이라는 리모트 레포지토리로 보낸다는 의미
- '-u' : --set upstream의 약자로 로컬 레포지토리에 있는 main 브랜치가 origin에 있는 main 브랜치를 tracking(추적)하도록 설정 (tracking connection)
- tracking connection이 한 번 설정되고 나면 현재 main 브랜치에 위치해서 git push / pull라고 입력해도 리모트 레포지토리의 main 브랜치를 대상으로 똑같이 동작함
- '-u'옵션을 주지 않아도 git pull/push할 수 있으나 git push origin main:main 이런식으로 복잡하게 표현해야 함

Git 원격 브랜치

origin/main

  • git clone의 결과물로는 로컬 저장소에 원격 브랜치가 생김
  • main이 로컬 레포지토리의 main 브랜치의 이름을 나타냄
  • origin/main에서 origin은 리모트 레포지토리의 이름, main은 그 브랜치의 이름
  • git push를 하면 main, [origin/main] 브랜치 모두 같은 커밋을 가리키게 됨

HEAD와 브랜치의 관계

HEAD -> branch -> commit

* HEAD & branch : 어떤 커밋을 가리키는 존재 -> "포인터"
  • HEAD는 직접적으로 커밋을 가리키지 않고 브랜치를 통해 간적적으로 커밋을 가리킴

head와 브랜치 사진

  • git checkout [브랜치명] 하면 코드의 관리 흐름이 [브랜치명]으로 이동함

브랜치 이동 사진

  • 머지 커밋 : HEAD가 가리키던 커밋에 다른 브랜치가 가리키던 커밋을 합쳐서 새로운 커밋을 만드는 작업

머지 커밋 사진

profile
배움의 기록을 차곡차곡

0개의 댓글