본문 바로가기

STUDY/GIT

6. Git 브랜치2: 브랜치 관리, 리모트 브랜치, 리배이스

브랜치 관리

 

> git branch
  hotfix
  iss53
* master
  testing
> git branch -v
  hotfix  4e14b5a fix newFunction
  iss53   3533c05 add newFunction
* master  760e43a resolve conflict
  testing 7b0dbe6 fix newfile1

git branch 명령어를 통해 현재 저장소에 있는 브랜치들을 볼 수 있다. * 표시가 된 브랜치는 현재 작업대상이 브랜치라는 뜻이다. -v 옵션과 함께 하면 브랜치별 마지막 커밋 정보를 볼 수 있다.

 

> git branch --merged
  hotfix
  iss53
* master
> git branch --no-merged
  testing

--merged와 --no-merged 옵션으로 현재 브랜치에 머지된 브랜치와 머지되지않은 브랜치를 확인할 수 있다.

 

> git branch -d testing
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'.
> git branch -D testing

 

-d 옵션을 사용하면 브랜치를 삭제할 수 있다. 이때 머지되지않은 브랜치는 삭제할 수 없다고 나오는데 -D 옵션을 사용하면 강제로 브랜치를 삭제할 수 있다.

 

 


리모트 브랜치

 

> git branch
* master
> git remote show origin
* remote origin
  Fetch URL: git@github.com:NanKisu/my_project.git
  Push  URL: git@github.com:NanKisu/my_project.git
  HEAD branch: master
  Remote branches:
    dev    new( next fetch will store in remotes/origin)
    master tracked
...

리모트 저장소에는 로컬 저장소와는 또 다른 브랜치가 존재할 수 있다. 위를 보면 로컬에는 master 브랜치 밖에 없지만 리모트브랜치에는 master, dev 두개의 브랜치가 존재한다.

 

> git fetch origin dev
> git checkout --track origin/dev
> git branch
* dev
master

git fetch 명령어로 리모트 브랜치의 정보를 가져올 수 있다. 그리고 --trach 옵션과 함께 git checkout 명령어를 실행하면 리모트 브랜치와 연결된 로컬 브랜치가 생성이 된다.

 

 


리배이스

 

> git merge dev
> git log --graph --all
*   commit 56e5aab299e9b1d68769f1d2481b1bbac700a36d (HEAD -> master)
|\  Merge: 8295d74 3a009a1
| | Author: nankisu <nankisu0301@naver.com>
| | Date:   Wed Jan 18 17:35:34 2023 +0900
| | 
| |     resolve conflict
| | 
| * commit 3a009a1adee6cb99534de28c2fd08232d366406c (dev)
| | Author: nankisu <nankisu0301@naver.com>
| | Date:   Wed Jan 18 17:33:37 2023 +0900
| | 
| |     fix dev
| | 
* | commit 8295d7467379d8439b3f6000ee0190aed0af455b
|/  Author: nankisu <nankisu0301@naver.com>
|   Date:   Wed Jan 18 17:33:55 2023 +0900
|   
|       fix master
|   
*

여러 브랜치에서 작업을 하다보면 위처럼 브랜치가 갈라지고 합쳐지는 모습을 취하게 된다. 이는 git의 장점이기도 하지만 너무 많은 브랜치 분리와 합병은 git 저장소의 이력을 분석하기 어렵게 만든다.

 

> (dev 브랜치에서) git rebase master
> git checkout master
> git merge dev
> git log --graph --all
* commit 5f6d9e983625e029f3e194bae7810e7f9e287618 (HEAD -> master, dev)
| Author: nankisu <nankisu0301@naver.com>
| Date:   Wed Jan 18 17:45:20 2023 +0900
| 
|     fix dev
| 
* commit a2934ad1a7eaead65090d0f705ed5e4c23ca7b2f
| Author: nankisu <nankisu0301@naver.com>
| Date:   Wed Jan 18 17:45:42 2023 +0900
| 
|     fix master
| 
*
...

git rebase 명령어를 사용하면 분리된 브랜치에서 하나의 줄기로 작업한 것처럼 이력을 바꿀 수 있다. 이처럼 리배이스는 주로 로컬에서 작업 시 브랜치 흐름을 정리하기 위해 쓰인다.

728x90

'STUDY > GIT' 카테고리의 다른 글

5. Git 브랜치1 - 브랜치, 머지  (0) 2023.01.18
3. Git 기초2 - 커밋 히스토리, 되돌리기  (0) 2023.01.13
2. Git 기초1 - 레포지토리, 라이프사이클  (0) 2023.01.13
1. 시작하기  (0) 2023.01.13