본문 바로가기
utils/git and github

[git] branch : branch를 생성하거나 확인 또는 삭제 및 변경

by ds31x 2023. 12. 30.

git branch

branch : Branch를 생성하거나 확인하는 명령.


branch 확인

아래와 같이 인자 없이 수행할 경우, 현재 존재하는 branch들 (local repository의)을 보여줌.

  • 기본적으로 main (과거엔 master) 라는 branch가 존재함.
  • *표시는 현재 작업이 이루어지고 있는 branch임을 표시함.
git branch

branch중에서 merge가 완료되었는지 여부는 다음을 통해 확인.

git branch --merged
git branch --no-merged

다음과 같이 -r 옵션과 같이 실행시 remote repository의 branch list를 출력함.

git branch -r

다음과 같이 -a 옵션과 같이 실행시 모든 branch list를 출력함.

git branch -a

verbose 옵션 -v (for local), -vv (for remote)을 주면 각 branch의 이름과 최종 commit의 hash id와 message를 표시

git branch -v
git branch -vv

새로운 branch 생성

gachonmmmil이라는 branch를 만들려면 아래와 같은 커맨드를 사용.

git branch gachon
git branch mmmil

  • branch 이름인 gachon, mmmil 은 실제로는 branch에 해당하는 특정 commit의 SHA1 hash value를 가르킴.
  • low-leve 명령어인 rev-parse 를 통해 해당 이름이 어떤 SHA1 hash value 를 가르키는지 확인 가능함.
    ← branch를 생성하는데 기준이 된 commit의 SHA1 hash code를 출력. : git rev-parse mmmil
  • git branch -v : verbose. branch에 대한 detail을 출력.

switch -c [새_브랜치_이름] 을 통해서도 만들 수 있음 (이 경우, 새로 생성된 브랜치로 이동도 이루어짐)

git switch -c <new_branch_name>
switch는 branch간 전환에서 보다 권장함.

다음과 같이 remote repository의 특정 branch를 시작 포인트로 지정하여 새로운 브랜치를 생성할 수도 있음.

git fetch orgin
git switch -c feature-x origin/develop
  • feature-x 라는 이름의 새로운 local branch가 생성됨.
  • 해당 브랜치는 remote repository의 develop 브래치의 최신 커밋을 기준으로 생성됨.
  • 현재 작업 중인 브랜치가 feature-x로 전환됨.
  • 이 feature-x 는 새로운 브랜치로 파일들을 변경 후 `git push orgin feature-x`원격저장소에 새로운 브랜치로 push 된다.
  • 때문에 feature-x 는 기존의 브랜치와 다른 이름이 되어야 한다.

새로운 브랜치 생성이 아닌 기존의 원격저장소의 브랜치와 연결하려면, -c 가 아닌 -u 옵션으로 사용해야 함.


원격지의 branch와 연결: -u

로컬브랜치를 특정 원격브랜치와 연결하여 추적관계로 만듦.

 

이 경우 명령어의 형태는 다음과 같음.

git branch -u [remote_repository/branch]

git branch -u origin/develop
  • 현재 branch(local repository)의 upstream을 입력한 remote_repository/branch로 지정.
  • -u--set-upstream-to 의 축약형.
  • 만일 remote repository의 별칭이 origin이고 연결하고자 하는 remote repository의 branch가 function 이라면, git branch -u origin/function 으로 수행.
  • 연결할 remote branch는 git branch -r 로 확인 가능하며, 만일 없다면 git fetch 로 정보를 업데이트하고 다시 확인할 것.
  • git fetch 수행 시 local repository는 변경하지 않고, remote_respository의 branch의 포인터만 생성해놓음.

branch 이름 변경.

git branch -m [old_name] [new_name]
  • old_name을 이름으로 가지는 branch를 new_name으로 이름을 변경함.
  • old_namenew_name 둘을 입력하지 않고, 하나의 이름만 입력할 경우 현재 branch가 해당 이름으로 변경됨.

branch 삭제.

git branch -d [target_name]
  • target_name 을 이름으로 가지는 branch를 삭제.

삭제가 아닌 숨긴다고 표현하는 게 보다 맞음.

그 이유는 이후 다시 같은 이름의 branch 를 생성시 예전 내용을 볼 수 있기 때문임.

마치 복구가 된 것처럼 보일 수 있으나 사실 기록을 다 가지고 있기 때문으로 실제 삭제라고 보기는 어려움.

이를 사용하기 위한 제한 사항은 다음과 같음.

  • -d 는 stage가 깨끗하게 처리된 상태(working tree에 작업한 기록이 없고, add 명령으로 stage에 commit할 것들이 없는 상태)여야 실행됨.
  • 또한 최신 commit이 연결된 remote repository의 branch보다 최신일 경우에도 삭제가 되지 않음.← 이경우 push를 해주어야 실행이 가능해짐.
  • 즉, 최신 변경 사항이 있어서 아직 Merge가 필요한 경우에는 실행이 되지 않음. ← 이 경우, -D 옵션을 사용하면 강제로 삭제함.
  • -d는 현재 branch를 대상으로 실행되지 못 함. 다른 branch로 switch한 다음 수행해야 함.

원격지 브랜치 삭제

push를 이용하여 삭제한다.

git push [remote_repository] -delete [삭제할_브랜치]

git push origin --delete feature-x
  • 원격저장소의 지정한 branch가 삭제되며 다른 사용자들도 접근하지 못하게 된다.
  • git fetch --all 을 수행하고 git branch -r 로 확인하면 해당 브랜치가 없어진 것을 확인할 수 있음.
  • 해당 branch의 commits도 당연히 삭제되므로 주의해서 사용해야 한다.

관련하여 읽어보면 좋은 자료들

2024.05.26 - [utils/git and github] - [Git] git 에서 branch란?

 

[Git] git 에서 branch란?

Git Branch의 개념Git에서 branch는 프로젝트를 독립적으로 관리할 수 있도록 해주는 중요한 기능임.branch를 통해 안정된 코드와 개발 중인 코드를 구분하여 관리할 수 있게 해줌. Branch를 통해동일한

ds31x.tistory.com

2024.05.20 - [utils/git and github] - [Git] Git Summary (작성중)

 

[Git] Git Summary (작성중)

git이란2024.05.20 - [utils/git and github] - Git : 소개 git 설치 후 해줘야 하는 작업들[Git] git 설치 후 우선 해줘야 하는 작업들 (tistory.com)local repository 초기화2024.05.20 - [utils/git and github] - [Git] init : local rep

ds31x.tistory.com