[Git] 브랜치(branch) - git branch, switch, merge, cherry-pick

0. 브랜치란?


브랜치(branch)

: 커밋을 가리키는 포인터

: 어떤 게 최신 커밋인지 정보를 가짐

: 깃으로 버전 관리를 시작하면 기본적으로 main(예전 버전은 master) 브랜치 생성

 

 

 

1. 브랜치 생성 및 이동

 


$ git branch

: 브랜치를 생성하거나 확인

: 새 브랜치를 만들면 기존 파일 유지하면서 내용을 수정하거나 기능 추가 가능

 

 

  • 옵션
-d 병합이 끝난 브랜치 삭제
-D 병합하지 않은 브랜치 강제 삭제

 

 

  • 새로운 브랜치 생성
git branch 새로운 브랜치

 

 

  • 현재 저장소의 브랜치 확인
git branch

현재 작업하는 브랜치는 앞에 * 표시

 

 

$ git switch

: 현재 브랜치에서 다른 브랜치로 이동

git switch 이동할 브랜치

 

 

 

2. 브랜치 정보 확인


전환할 브랜치에서 커밋

  • master 브랜치
vim work.txt # work.txt에 'master content 3" 입력 후 저장
git commit -am "master work 3"

 

 

  • apple 브랜치
git switch apple # apple 브랜치로 이동

vim work.txt # work.txt에 'apple content 3' 추가 입력 후 저장
vim apple.txt # apple.txt 생성하고 'apple content 3' 입력 후 저장

git add .
git commit -m "apple work 3"

 

 

  • 커밋 저장 확인
git log --all --oneline # 모든 커밋 내용을 한 줄로 표시

 

 

브랜치와 커밋 관계 알아보기

: 모든 브랜치의 커밋을 한 줄로 표현하고, 브랜치마다 최신 커밋을 살펴보고, 이를 그래프로 표현

git log --all --oneline --branches --graph

work 2에서 master와 apple 브랜치가 각각 분기

 

 

브랜치 사이의 차이점 살펴보기

: git log 명령에서 브랜치 이름 사이에 마침표 2개(..)를 넣는 명령으로 확인

: 마침표 왼쪽에 있는 브랜치 기준으로 오른쪽 브랜치와 비교

git log master..apple

 

 

 

3. 브랜치 병합


$ git merge

: 브랜치 병합할 때 사용

: main 브랜치로 병합하고 싶다면 main 브랜치에서 명령어 사용해야 함

git merge 가져올 브랜치

 

 

서로 다른 파일 병합

  • master 브랜치
vim work.txt # work.txt를 만들고 '1' 입력 후 저장
git add work.txt
git commit -m "work 1"

git branch google # google 브랜치 생성
vim google.txt # google.txt를 만들고 'google 2' 입력 후 저장
git add google.txt
git commit -m "google work 2"

 

 

  • google 브랜치
git switch google
vim google.txt # google.txt만들고 '3' 입력 후 저장
git add google.txt
git commit -m "google work 3"
git log --all --oneline --branches --graph

 

 

  • master 브랜치로 google 브랜치 병합하기
git switch master # 먼저 master 브랜치로 이동해야 함
git merge google

 

 

  • git log 명령으로 커밋 확인
git log --oneline --branches --graph

 

 

한 문서의 다른 부분을 수정했을 때 병합

  • master 브랜치
vim work.txt
git add work.txt
git commit -m "work 1"

work.txt 내용

 

 

git branch ms # ms 브랜치 생성
vim work.txt
git add work.txt
git commit -m "master work 2"

work.txt 내용

 

 

  • ms 브랜치
git switch ms # ms 브랜치로 이동
vim work.txt
git commit -am "ms work 2"

ms 브랜치에서의 work.txt 내용

 

 

  • master 브랜치로 ms 브랜치 병합하기
git switch master
git merge ms

work.txt 내용

 

 

한 문서의 같은 부분을 수정했을 때 병합

  • master 브랜치
vim work.txt
git add work.txt
git commit -m "work 1"

git branch naver
vim work.txt
git add work.txt
git commit -m "master work 2"

work.txt 내용

 

 

  • naver 브랜치
git switch naver # naver 브랜치로 이동
vim work.txt
git commit -am "naver work 2"

naver 브랜치에서의 work.txt 내용

 

 

  • master 브랜치로 naver 브랜치 병합하기
git switch master
git merge naver # 충돌 발생

work.txt 내용

 

 

  • 파일 내용 수정 후 커밋
vim work.txt # 충돌 없애기 위해 파일 내용 수정

work.txt 내용

 

git commit -am "merge naver branch"
git log --oneline --branches --graph

 

 

$ git cherry-pick

: 가져올 브랜치의 특정 버전의 변경 내용만 병합할 때 사용

git cherry-pick 체리픽할 해시

 

 

  • master 브랜치
touch init.txt; git add init.txt; git commit -m "init" # init.txt 생성 -> 스테이징 -> 커밋

git branch topic
touch m1; git add m1; git commit -m "m1"
touch m2; git add m2; git commit -m "m2"
git log --oneline --branches --graph

※ 여러 명령어 동시에 사용할 때는 세미콜론(;)으로 구분

 

 

  • topic 브랜치
git switch topic
touch t1; git add t1; git commit -m "t1"
touch t2; git add t2; git commit -m "t2"
touch t3; git add t3; git commit -m "t3"
git log --oneline --branches --graph

 

 

  • master 브랜치로 topic 브랜치의 t2 버전만 병합하기
git switch master
git cherry-pick 02021cd
git log --oneline --branches --graph