Git:Branch
Git branche 명령어에 대한 설명
자주 사용하는 Git Branch 명령어 옵션
-
git branch
- 현재 존재하는 브랜치를 조회합니다.
-
git branch -r
- 원격저장소의 브랜치 목록 조회.
-
git branch
<Branch B><Branch A>
- 브랜치명A에서 새로운 브랜치 브랜치명B를 만듭니다. (git에서 기본 브랜치는 master라는 이름을 사용합니다.)
-
git branch
<Branch name> - 브랜치명의 새로운 브랜치를 만듭니다. (체크아웃은 하지 않습니다.)
-
git fetch --all --prune
- 원격 저장소에 추가되거나 삭제된 브랜치를 나의 Local에 적용
-
git branch -d
<Branch name> - 브랜치를 삭제합니다.
-
git push origin --delete
<Branch name> - 원격지의 브랜치를 삭제합니다.
-
git branch -m
<Branch name><New Branch name>
- 존재하는 브랜치를 새로운브랜치로 변경합니다. 이미 존재하는 브랜치명이 있을 경우에는 에러가 나는데
-M
옵션을 사용하면 이미 있는 브랜치의 경우에도 덮어씁니다.
-
git tag
- 현재 존재하는 태그 목록을 볼 수 있다.
-
git tag
<Tag name><Branch name>
- 브랜치명의 현재시점에 태그명으로 된 태그를 붙힙니다.
-
git checkout
<name> - 해당 브랜치나 태그로 작업트리를 변경합니다.
-
git checkout -b
<Branch B><Branch A>
- 브랜치명A에서 브랜치명B라는 새로운 브랜치를 만들면서 체크아웃을 합니다.
-
git rebase 브랜치명
- 브랜치명의 변경사항을 현재 브랜치에 적용합니다.
-
git cherry-pick 커밋명
- 커밋명의 특정 커밋만을 선택해서 현재 브랜치에 커밋으로 만듭니다.
-n
옵션을 주면 작업트리에 합치지만 커밋은 하지 않기 때문에 여러개의 커밋을 합쳐서 커밋할 수 있습니다.
branch 푸쉬하기
-
git push [원격저장소명] [로컬브랜치명]
-
git push [원격저장소명] [로컬브랜치명:원격브랜치명]
위 명령어로 로컬에 있는 branch를 원격으로 push할 수 있습니다. 원격에서도 동일한 브랜치명을 사용하려면 첫번째 명령어를 사용하면 되고 원격에서는 다른 이름을 사용하고 싶으면 두번째 명령어를 사용하면 됩니다.
일반적으로 메인 원격저장소를 origin이라는 이름을 사용하므로 위처럼 git push origin [브랜치명]
을 사용하면 원격저장소에도 branch를 적용할 수 있습니다.(로컬에서만 사용할 branch는 굳이 push안해도 되겠죠.)
새로운 로컬 브랜치를 이미 존재하는 리모드 브랜치로 연결
예컨데, 로컬에 a4y-2.0
브랜치가 없는데, origin
원격 서버에는 존재할 경우, a4y-2.0
브랜치를 origin/a4y-2.0
으로 연결하고 싶다면 branch --set-upstream-to
를 사용하면 된다.
로컬 브랜치를 새로운 리모드 브랜치로 연결
예컨데, 로컬에 a4y-2.0
브랜치가 있고, origin
원격 서버에 없을 경우, a4y-2.0
브랜치를 origin/a4y-2.0
으로 연결하고 싶다면 branch --set-upstream
를 사용하면 된다.
Move master to branch
Within the directory of the repository, in the command line type the following:
Default remote/branch
커맨드에서 git 명령을 쓰다 보면 remote나 branch명을 쓰기가 너무 귀찮다. 이럴 때 default로 remote나 branch를 설정해두면 좋다. 처음 checkout할 때 --track
옵션을 주거나, .git/config
파일을 직접 수정하는 방법이 있다. 또는, branch --set-upstream-to
옵션으로 설정해 줘도 된다.
Tracking branch
Tracking 브랜치 정보는 로컬 브랜치와 리모트 브랜치 사이의 연결 정보이고 설정에 저장된다.
Remote Tracking 브랜치
Remote Tracking 브랜치는 origin/master와 같은 브랜치를 말한다. 이 브랜치는 origin 저장소에 있는 master 브랜치가 가리키는 커밋을 그대로 가리키는 브랜치이다. 리모트 저장소의 브랜치를 Fetch해 오면 이 브랜치가 업데이트된다.
Remote Tracking 브랜치는 다음과 같은 특징이 있다.
- 이 브랜치는 사용자가 임의로 수정할 수 없다.
- git fetch, git pull 명령으로만 업데이트할 수 있다.
Tracking 브랜치
Tracking 브랜치는 Remote Tracking 브랜치(이하 리모트 브랜치)보다 복잡하지만 그렇다고 어려운 것도 아니다.
Tracking 브랜치는 로컬 브랜치이다. 로컬 브랜치 중에서 리모트 브랜치를 Tracking하는 브랜치다.
Tracking 특징 다음과 같다:
- 이 브랜치는 사용자가 임의로 수정할 수 있다.
- git fetch로 정보가 업데이트되지 않는다. git fetch는 단지 리모트 저장소의 브랜치를 Tracking하는 Remote Tracking 브랜치만 만든다.
Tracking 브랜치는 도우미 같은 것으로 생각하면 된다. 몰라도 크게 불편하지 않다.
Clone all remote branches
#!/bin/bash
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
git branch --track "${branch##*/}" "$branch"
done
참고로 TAG는 git pull --tags
를 사용하면 된다.
원격지 브랜치 동기화
원격 저장소에 추가되거나 삭제된 브랜치가 나의 Local에 적용안될 때가 있다.
또는