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 생성
gachon
과 mmmil
이라는 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_name
과new_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란?
2024.05.20 - [utils/git and github] - [Git] Git Summary (작성중)
'utils > git and github' 카테고리의 다른 글
[git] switch : branch 전환 (0) | 2023.12.31 |
---|---|
[git] stash : 현재 작업을 임시 저장 (1) | 2023.12.31 |
[git] revert : 특정 commit 취소하기. (1) | 2023.12.30 |
[git] .gitignore : 특정 resources를 git으로부터 격리. (1) | 2023.12.30 |
[github] ssh 키 등록하기. (0) | 2023.12.27 |