728x90
branch
브랜치(branch)는 나뭇가지라는 뜻으로, 여러 갈래로 작업 공간을 나누어 독립적으로 작업할 수 있도록 도와주는 git의 도구이다.
장점
- 독립 공간을 형성하기 때문에 원본(master)에 대해 안전하다.
- 하나의 작업은 하나의 브랜치로 나누어 진행되므로 체계적인 개발이 가능하다.
- Git은 브랜치를 만드는 속도가 굉장히 빠르고, 적은 용량을 소모한다.
브랜치 조회
로컬 저장소 및 원격 저장소의 브랜치 목록을 확인한다.
생성된 브랜치가 많은 경우 q를 입력하여 빠져나온다.
# 로컬 저장소의 브랜치 목록 확인
$ git branch
# 원격 저장소의 브랜치 목록 확인
$ git branch -r
브랜치 생성
브랜치의 이름을 지정하여 새로운 브랜치를 생성한다.
$ git branch {브랜치이름}
# 특정 커밋을 가준으로 브랜치 생성
$ git branch {브랜치이름} {커밋ID}
브랜치 삭제
병합된 브랜치를 삭제하거나, 강제로 삭제한다.
$ git branch -d {브랜치 이름}
# 강제 삭제
$ git branch -D {브랜치 이름}
switch
현재 브랜치에서 다른 브랜치로 이동한다.
❗브랜치를 이동하기 전에, 해당 브랜치의 변경 사항을 반드시 커밋해야 한다.
❗커밋하지 않은 상태에서 switch를 하게 되면 변경된 해당 파일이 그대로 남아있게 된다.
$ git switch {브랜치이름}
# 새로운 브랜치를 생성 후 이동
$ git switch -c {브랜치이름}
$ git switch -c {브랜치이름} {커밋ID}
merge
- 분기된 브랜치들을 하나로 합치는 명령어
- 병합하기 전에 브랜치를 합치려고 하는 메인 브랜치로 switch 해야 한다.
fast-forward
- 메인 브랜치에 신규 커밋이 없는 경우, 브랜치의 최신 커밋을 master 브랜치로 한다.
3-way
- 브랜치마다 신규 커밋이 하나 이상 있는 경우, 새로운 커밋을 생성하여 합쳐준다.
merge 옵션
--ff: default, fast-forward면 새로운 커밋을 생성하지 않고, fast-forward가 아니면 merge 커밋을 생성한다.
--no-ff: 무조건 merge 커밋을 생성한다.
--squash: 모든 커밋을 하나로 합친 뒤 merge를 진행한다. 커밋 히스토리를 깔끔하게 관리할 수 있다.
$ git merge {대상 브랜치이름}
$ git merge --ff {대상 브랜치이름}
$ git merge --no-ff {대상 브랜치이름}
$ git merge --squash {대상 브랜치이름}
rebase
- 현재 브랜치를 대상 브랜치의 뒤에 옮겨 붙인다. 대상 브랜치는 주로 dev, master과 같은 주요 브랜치이다.
rebase 옵션
--continue: 주로 충돌이 발생했을 때 사용한다. 리베이스 관련 문제를 다 해결했고, 리베이스를 계속 진행하겠다는 의미
--abort: 현재 진행 중인 리베이스를 취소
$ git rebase {대상 브랜치이름}
# git rebase develop
# conflict 발생 및 해결 -> 변경사항 add -> 옵션 명령어
$ git rebase --continue
$ git rebase --abort
만약 브랜치가 1000개 정도 될 때, 모두 3-way-merge를 해버리면 git log가 매우 복잡해진다.
때문에, 간단한 브랜치들은 rebase 하는 경우가 많다. rebase를 하면 훨씬 깔끔해진다.
그러나 브랜치끼리 차이가 심한 경우에는 conflict가 많이 발생한다.
따라서 커밋 로그의 관리와 Git의 사용 목적에 따라 rebase와 merge를 맞춰서 사용한다.
만약, 모든 커밋 하나하나가 master에 정리되어 들어가야 하면, rebase를 사용한다.
push
- 원격 저장소(origin)에 로컬 디렉토리의 커밋 내역을 업로드
- -f 옵션으로 강제 업로드할 수 있다.
$ git push origin {브랜치이름}
$ git push -f origin {브랜치이름}
pull
- 원격 저장소(origin)의 특정 브랜치의 커밋 내역을 현재 위치한 로컬 디렉토리의 브랜치에 동기화
$ git pull origin {브랜치이름}
conflict
두 브랜치의 동일한 파일에 상반된 내용이 있을 때, 충돌(Conflict)이 발생한다.
이런 상황에서는 git이 스스로 판단할 수 없기 때문에 반영할 내용을 개발자가 직접 결정한다.
[참고]
Git 브랜치 - Rebase 하기 | git-scm.com
Merge와 Rebase의 차이점 | anonymdevoo brunch
728x90
'Git' 카테고리의 다른 글
[Github] 깃헙으로 협업하기(Issue, Pull Request, Label) (0) | 2024.05.02 |
---|---|
[Github] git-page에 secret key 적용하기 (Actions) (1) | 2024.03.04 |
[Git] 깃 작업 되돌리기 명령어 (0) | 2024.02.26 |
[Git] 깃 기본 명령어 (0) | 2024.02.26 |