본문 바로가기
Develop/DevOps

Git branch

by jaeyoungb 2022. 12. 16.

Git branch

기존 main branch에서의 작업은 유지하고 새로운 feature branch에서 코드 추가 및 수정 작업을 할 수 있다.

 

branch 생성 및 변경

# feature라는 branch를 새로 생성하는 경우
git switch -c feature
git checkout -b feature

# 기존에 있던 main branch로 HEAD를 변경하는 경우
git switch main
git checkout main

 

branch 합치기

# 기능 개발이 진행
git commit -m "기능1의 세부 기능1"
git commit -m "기능1의 세부 기능2"
git commit -m "기능1 개발 완료"

# 병합을 위해 main branch로 전환
git switch main

# main branch로 feat/todo branch를 병합
git merge feat/todo

실제 프로젝트 개발 시에는 로컬에서 merge하는 것보다 pull request 기능을 이용하는 방법이 더 많다.

 

# 기능 개발이 진행
git commit -m "기능1의 세부 기능1"
git commit -m "기능1의 세부 기능2"
git commit -m "기능1 개발 완료"

# Github Repository로 push
git push origin feat/todo

# Github에서 Pull Request 진행

- 참고 : https://github.com/nhn/tui.editor/pull/2633

 

 

branch 삭제

Github에서 branch 삭제 버튼

# 로컬 Repository에서 branch 삭제
git branch -d <branch name>

# 다 만들지 못한 기능의 기록 삭제
git branch -D <branch name>

해당 기능으로 다시 돌아가야할 경우도 있기 때문에, branch 삭제는 팀 및 회사 정책을 따르는 것이 좋다.

 

Git 설정

# 버전 히스토리를 식별할 때 사용할 이름 설정
$ git config --global user.name "[firstname lastname]"

# 각 기록과 연결할 이메일 주소를 설정
$ git config --global user.email “[valid-email]”

 

도움말

# git에서 제공하는 모든 명령어 확인
$ git help -all

# 특정 command에서 사용할 수 있는 모든 옵션 확인
$ git [command] -help

 

세팅 및 초기화

# 현재 directory를 기준으로 Git 저장소 생성
$ git init

# URL을 통해 리모트 Repository를 로컬 Repository에 복제
$ git clone [url]

 

Stage & Commit

# 다음 커밋을 위해 현재 디렉토리에서 수정된 파일을 확인
$ git status

# 다음 커밋을 위해 파일을 추가(스테이지) (stage)
$ git add [file]

# 추가한 파일을 언스테이징 (변경 사항은 유지)
$ git reset [file]

# 스테이지되지 않은 변경 사항을 보여줌
$ git diff

# 스테이지했지만 커밋하지 않은 변경 사항을 보여줌
$ git diff --staged

# 스테이지된 컨텐츠를 메시지와 함께 커밋 (스냅샷 생성)
$ git commit -m “[descriptive message]”

 

Branch & Merge

# branch 목록을 보여줌 (* 표시로 현재 작업중인 브랜치를 확인 가능)
$ git branch

# 현재 커밋에서 새로운 branch를 생성
$ git branch [branch-name]

# 다른 branch로 전환
$ git switch [branch-name]
$ git checkout [branch-name]

# 새로운 branch를 생성하고 해당 branch로 전환
$ git switch -c [branch-name]
$ git checkout -b [branch-name]

# 현재 branch에 특정 branch의 히스토리를 병합
$ git merge [branch-name]

# 현재 branch의 모든 커밋 히스토리를 보여줌
$ git log

 

비교 및 검사

# branchB에 없는 branchA의 모든 커밋 히스토리를 보여줌
$ git log branchB..branchA

# 해당 파일의 변경 사항이 담긴 모든 커밋을 표시 (파일 이름 변경도 표시)
$ git log --follow [file]

# branchA에 있지만 branchB에 없는 것의 변경 내용(diff)을 표시 (branch간 상태 비교)
$ git diff branchB...branchA

 

공유 및 업데이트

# url을 통해 특정 리모트 Repository를 별칭으로 추가
$ git remote add [alias] [url]

# 별칭으로 추가한 리모트 Repository에 있는 모든 branch 및 데이터를 로컬로 가져옴
$ git fetch [alias]

# 리모트 branch를 현재 작업중인 branch와 병합하여 최신 상태로 만들 수 있음
$ git merge [alias]/[branch]

# 로컬 branch의 커밋을 리모트 branch로 전송
$ git push [alias] [branch]

# 리모트 Repository의 정보를 가져와 자동으로 로컬 branch에 병합
$ git pull

 

히스토리 수정

# 특정 branch의 분기 이후 커밋을 현재 작업중인 branch에 반영
$ git rebase [branch]

# 득정 커밋 전으로 돌아가며 스테이지된 변경 사항을 모두 지움
$ git reset --hard [commitish]

 

임시 저장

# 수정하거나 스테이지된 변경사항을 스택에 임시 저장하고 현재 작업 내역에서 지움
$ git stash

# 스택에 임시 저장된 변경사항의 목록을 보여줌
$ git stash list

# 스택에 임시 저장된 변경사항을 다시 현재 작업 내역에 적용
$ git stash apply

# 스택에 임시 저장된 변경사항을 다시 현재 작업 내역에 적용하고 스택에서 삭제함
$ git stash pop

# 스택에 임시 저장된 변경사항을 삭제함
$ git stash drop