본문 바로가기
버전관리/GIT_HUB

GIT 브랜치를 사용하는 이유와 생성/수정/삭제

by joa-yo 2023. 11. 25.
반응형

안녕하세요. 오늘은 깃을 브랜치 관리하는 방법에 대해 알아보고자 합니다.

 

브랜치를 사용하는 이유

1. 서비스의 안정적 유지

  • release 버전에 영향을 미치지 않고 여러가지 기능을 테스트 해 볼 수 있다.
  • 버그 수정 시 사용할 수 있다. 버그가 발생한 브랜치에서 새로운 브랜치를 만들어 버그를 수정 한 후 다시 원브랜치로 통합한다.

2. 시간에 따른 프로젝트 이력 관리

  • 어느 시점에 버그가 발생했는지, 어떤 기능이 언제 추가했는지를 추적할 수 있다.

3. 버그 수정과 기능개발 분리

  • 버그 수정과 새로운 개발을 각각의 브랜치에서 수행할 수 있다. 이는 기능 개발의 복잡성을 낮출 수 있다.

4. 동시 개발 시 편의성

  • 각 개발자가 맡은 기능을 개발하기 위해서 각자의 브랜치에서 개발을 진행하다가, 개발 완료 후  branch를 통합하여 테스트 할 수 있다.

5. 코드리뷰 용이성

  • 변경 사항을 검토하기가 편리하여, 특정 작업에 대한 코드 리뷰를 효과적으로 수행할 수 있다.

 

 


 

이처럼 브랜치를 사용하면, 프로젝트 관리가 수월해집니다. 브랜치를 효과적으로 관리하기 위한 방법으로 Git Branch 전략들이 많이 나와있는데, 이는 다른 블로거분이 잘 정리해주셔서, 링크로 대체하겠습니다.

 

https://github.com/DoTheBestMayB/UpbitAPI/issues/2

 

git branch 전략은 왜 사용할까? · Issue #2 · DoTheBestMayB/UpbitAPI

git branch 전략은 왜 사용할까? Git 브랜치 전략을 사용하는 이유 팀으로 개발하면 많은 branch가 생성되는데, 이 branch 들을 관리하고 한 branch로 통합 하기 위해서는 규칙이 필요하다. 이 규칙을 잘

github.com

 


이제 git branch를 관리하기 위한 명령어에 대해 알아보겠습니다. 이 명령어들은 모두 staging 영역에서 작동하며, 이 부분을 미리 숙지하면 좋습니다. 다시 말해, push를 하기 전까지는 origin에 영향을 미치지 않습니다. 또한 HEAD는 현재 작업 중인 브랜치와 현재 커밋 위치를 나타냅니다 

 

먼저 브랜치 테스트를 위한 작업공간을 만들겠습니다.

$ git init branchTest
$ cd branchTest
$ touch README
$ git add README.txt
aaa@DESKTOP-AAAAA MINGW64 /d/git/repositories/branch (master)
$ git commit -m readme
[master (root-commit) 149b39f] readme
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.txt

$ git log --oneline
149b39f (HEAD -> master) readme

 

commit 및 merge 이력 확인하기

현재 브랜치에서 확인가능한 커밋 이력과 브랜치 병합 이력을 살펴볼 수 있습니다. git log --oneline을 사용하면 이력을 간단하게 파악할 수 있지만, 커밋한 사용자를 찾거나 커밋일시를 확인하려면 git log를 활용해야합니다.

 

$ git log //커밋이력을 상세히 출력

$ git log
commit 149b39f33sssssssssssssssssssssssssssssdf (HEAD -> master)
Author: authorName <mailaddress@mail.com>
Date:   Sat Nov 25 21:07:40 2023 +0900

    readme

$ git log --oneline   //하나의 커밋이력을 한줄로 출력

$ git log --oneline
149b39f (HEAD -> master) readme

 

브랜치 생성/변경/확인

$ git branch newBranch    ## 1. 'newBranch'이라는 이름을 가진 새로운 브랜치 생성 (HEAD는 변경 없음)
$ git switch newBranch    ## 2. 현재 브랜치를 newBranch으로 변경 (HEAD 변경)
$ git branch -m 'bugfix'  ## 3. 현재 브랜치 이름을 'bugfix'으로 변경
$ git branch              ## 4. 브랜치 리스트 확인
* bugfix                  ## *는 현재 브랜치를 의미합니다.
  master

 

새로운 브랜치를 만들고 HEAD를 이동시키려면, 'git switch -c newBranch' 또는 'git checkout -b newBranch' 명령어를 사용할 수 있습니다. 이 중 'git switch -c newBranch'가 더 최신이면서 명시적인 명령어이므로, 가능하다면 이를 사용하는 것이 좋습니다

 

작업브랜치 이동

## 변경 전
$ git branch
* bugfix
  master

## master 브랜치로 이동 및 HEAD 이동
$ git swtich master

## 이전 브랜치로 이동 및 HEAD 이동
$ git switch -
Switched to branch 'bugfix'

## 결과
$ git log --oneline
149b39f (HEAD -> bugfix) readme



과거의 커밋이력으로 HEAD 이동

사전준비

$ echo Hello world >> index.html
$ git add index.html
$ git commit -m indexFile
[bugfix bd16877] indexFile
 1 file changed, 1 insertion(+)
 create mode 100644 index.html

## 결과
$ git log --oneline
bd16877 (HEAD -> bugfix) indexFile
149b39f (master) readme

 

 

 

 

 

이전 커밋으로 이동

## 변경 전
$ git log --oneline
bd16877 (HEAD -> bugfix) indexFile
149b39f (master) readme


## 이전 커밋으로 이동
$ git switch -d HEAD~
HEAD is now at 149b39f readme

## 결과
$ git log --oneline
149b39f (HEAD, master) readme


## 특정 커밋이력으로 이동
$ git switch -d bd16877
Previous HEAD position was 149b39f readme
HEAD is now at bd16877 indexFile

## 결과
$ git log --oneline
bd16877 (HEAD, bugfix) indexFile
149b39f (master) readme

## master로 다시 변경
$ git switch master
Switched to branch 'master'

 

 

브랜치 삭제

## 변경 전
$ git log --oneline
149b39f (HEAD -> master) readme


## 삭제 테스트를 위한 main브랜치 커밋이력 생성
$ git add second.txt
warning: in the working copy of 'second.txt', LF will be replaced by CRLF the next time Git touches it
$ git commit -m 'second'
[master d4584bc] second
 1 file changed, 1 insertion(+)
 create mode 100644 second.txt
 
$ git log --oneline --graph --all
* d4584bc (HEAD -> master) second
| * bd16877 (bugfix) indexFile
|/
* 149b39f readme

## 삭제 테스트를 위한 새로운 브랜치 생성 및 커밋이력 생성
$ git branch newBranch
$ echo newBranch >> newBranch.txt
$ git add newBranch.txt
$ git switch newBranch
Switched to branch 'newBranch'
A       newBranch.txt
$ git commit -m newBranch   
[newBranch 1adb0d5] newBranch
 1 file changed, 1 insertion(+)
 create mode 100644 newBranch.txt
 
## 생선된 브랜치 및 커밋이력
$ git log --oneline --graph --all
* 1adb0d5 (HEAD -> newBranch) newBranch
* d4584bc (master) second
| * bd16877 (bugfix) indexFile
|/
* 149b39f readme

## 삭제를 위해 다른 브랜치로 이동
$ git switch master
Switched to branch 'master'

## merge된 브랜치 인 경우 삭제/mergee되지 않은 경우 삭제 불가
$ git branch -d newBranch
error: The branch 'newBranch' is not fully merged.
If you are sure you want to delete it, run 'git branch -D newBranch'.

## 강제 브랜치 삭제
$ git branch -D newBranch
Deleted branch newBranch (was 1adb0d5).


## 결과
$ git log --oneline --graph --all
* d4584bc (HEAD -> master) second
| * bd16877 (bugfix) indexFile
|/
* 149b39f readme

 

삭제를 위한 준비과정이 상당히 길었지만 'git branch -D newBranch' 명령어를 사용하면 삭제된다는 결론입니다!

 

 

반응형

댓글