Git 사용법 (2)

Tube·2021년 4월 29일
2

Git

목록 보기
2/2

Git 브랜치

모든 버전 관리 시스템은 브랜치를 지원한다. 원래 코드와 상관없이 독립적으로 개발을 진행할 수 있어야 되는데, 이렇게 사용하는 것이 브랜치이다.
다른 브랜치를 만들어 작업한 다음 나중에 병합(merge) 하는 식으로 작업을 권장한다.

브랜치 생성하기 ( git branch )

git의 새 브런치는 git branch명령어로 만들 수 있다.

$ git branch tube

git은 HEAD라는 특수한 포인터가 지금 작업 중인 브랜치를 파악한다.

브랜치를 생성하면서 바로 해당 브랜치로 이동할 수 있다.

$ git switch -c tube

브랜치 이동하기 ( git switch )

git switch명령어로 HEAD가 가리키는 브랜치를 변경할 수 있다.

$ git switch tube
Switched to branch 'tube'

git 2.3 이후 버전에서는 checkout 기능 중에 switch, restore 기능은 분리되었다. checkout 명령어가 안되는 건 아니지만 checkout의 기능이 많아 분리 시킨 듯싶다.

tube 브랜치로 파일을 하나 만들고 커밋 해 보자. ( 현재 tube의 브랜치이다. )

$ echo "tube branch" > REAMDME_TUBE.md 
$ git add .
$ git commit -m "tube branch commit"
$ ll
total 16
drwxr-xr-x   5 jeonjeonghoon  staff   160B  4 29 03:36 .
drwxr-xr-x   8 jeonjeonghoon  staff   256B  4 29 03:25 ..
drwxr-xr-x  12 jeonjeonghoon  staff   384B  4 29 03:36 .git
-rw-r--r--   1 jeonjeonghoon  staff    12B  4 29 03:27 README.md
-rw-r--r--   1 jeonjeonghoon  staff    12B  4 29 03:36 REAMDME_TUBE.md

잘 생성 되었다. 그럼 이제 다시 master의 브랜치로 가보자.

$ get switch master
$ ll
total 8
drwxr-xr-x   4 jeonjeonghoon  staff   128B  4 29 03:36 .
drwxr-xr-x   8 jeonjeonghoon  staff   256B  4 29 03:25 ..
drwxr-xr-x  12 jeonjeonghoon  staff   384B  4 29 03:36 .git
-rw-r--r--   1 jeonjeonghoon  staff    12B  4 29 03:27 README.md

tube 브랜치에서 커밋 했던 파일이 없다. 두 브랜치의 작업은 독립적으로 각 브랜치에 존재한다. 때가 되면 각자 작업 후 병합(merge) 해줘야 된다.

현재 포인터(HEAD) 가르키고 있는 브랜치 확인하기

현재 어떤 브랜치에서 작업 중인지 확인해야 될 때가 있다. git log명령어로 확인하도록 하자.

$ git log --oneline --decorate --graph --all
* 7ec78d8 (HEAD -> tube) tube branch commit
* 373147d (master) first commit
(END)

브랜치 merge 하기

새로운 브랜치를 만들어 작업이 끝났거나 이슈를 해결했으면 git merge명령어로 다시 브랜치를 합쳐야 한다.
밑은 12번 issue가 생겨 브랜치를 만들어 해결하는 과정이다.

$ git switch -c iss12
$ echo "fixed me" > fixedfile.md
$ git add fixedfile.md
$ git commit -m "fixed the issue 12"
$ git switch master
$ git merge iss12

브랜치 삭제하기

더 이상 필요 없는 브랜치는 git branch -d명령어로 삭제해 준다.

$ git branch -d iss12

브랜치 관리하기

git branch명령어로 branch들을 관리할 수 있다. git branch -v명령어를 이용하면 각 브랜치마다 마지막 커밋 메시지를 볼 수 있다.

$ git branch -v

--merged --no-merged옵션을 이용하면 merge된 브랜치와 merge 되지 않은 브랜치를 볼 수 있다.

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

merge 되지 않는 커밋을 담고 있는 브랜치는 기본적으로 삭제되지 않지만 git branch -D 명령어로 강제로 삭제할 수 있다.

리모트 브랜치

리모트 Refs는 리모트 저장소에 있는 포인터인 레퍼런스이다. 리모트 저장소에 있는 브랜치, 태그 등등을 의미한다. git ls-remote로 모든 리모트 Refs를 조회할 수 있다. git remote show명령은 모든 리모트 브랜치와 그 정보를 보여준다.

$ git remote show
origin

$ git remote show origin
* remote origin
  Fetch URL: https://github.com/tube-jeonghoon/git-test.git
  Push  URL: https://github.com/tube-jeonghoon/git-test.git
  HEAD branch: master
  Remote branches:
    master                        tracked
    refs/remotes/origin/serverfix stale (use 'git remote prune' to remove)
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

리모트 트래킹 브랜치

리모트 브랜치를 추적하는 브랜치이다. 이 브랜치는 로컬에 있지만 움직일 수는 없다. 리모트 서버에 연결할 때마다 리모트 브랜치에 따라서 자동으로 움직일 뿐이다. 리모트 트래킹 브랜치는 북마크라고 할 수 있다.

리모트 브랜치의 이름은 (remote)/(branch) 형식으로 되어 있다. 예를 들어 저장소 origin의 master의 브랜치를 보고 싶다면 origin/master라는 이름으로 브랜치를 확인하면 된다.

브랜치 원격저장소로 푸시하기 ( git push )

로컬 브랜치를 서버로 전송하려면 쓰기 권한이 있는 리모트 저장소에 Push 해야 한다.
git push (remote) (branch)명령어로 원격 저장소에 Push 할 수 있다.

$ git push origin hotfix

git push origin hotfix명령어는 자동적으로 원격 저장소에 hotfix 브랜치에 저장된다. [로컬 저장소]:[원격 저장소] 형으로 자동으로 변형된다. 만약 원격 저장소에 다른 이름의 브랜치로 저장하고 싶으면 [원격 저장소]의 이름을 바꿔주면 된다. git push origin hotfix:newhotfix 이런 형태로 말이다.

브랜치 원격저장소에서 패치하기 ( git fetch )

업데이트된 원격 저장소에서 데이터를 받을 때는 git fetch 명령어를 쓰면 된다. 주의할 점은 여기서 Fetch 명령으로 리모트 트래킹 브랜치를 내려받는다고 해서 로컬 저장소에 수정할 수 있는 새로운 브랜치가 생기는 것이 아니다. 그냥 origin에 해당 브랜치의 리모트 브랜치 포인터가 생기는 것이다.
내려받은 Fetch에는 두 가지 선택지가 있다.
1. git merge [remote]/[branch]로 받은 내용하고 병합(merge) 하는 것

$ git merge origin/hotfix

2.git switch -c [new_branch] [remote]/[branch]로 병합(merge) 하지 않고 트래킹 브랜치에서 새 브랜치를 만들어서 작업하는 것

$ git switch -c hotfix origin/hotfix

리모트 브랜치 추적하기

트래킹 브랜치 만들기 ( git switch -c [net_branch][remotename]/[branch] )

리모트 트래킹 브랜치를 로컬 브랜치로 받아오면 자동으로 "tracking 브랜치"가 만들어진다. 트래킹 브랜치는 리모트 브랜치와 직접적인 연결고리가 있는 로컬 브랜치이다. 저장소를 clone 하면 자동적으로 로컬 master 브랜치를 리모트 origin/master 브랜치의 트래킹 브랜치로 만든다.

새로운 브랜치를 생성하면서 origin 저장소의 hotfix 브랜치를 트래킹 한다.

$ git switch -c hf origin/hotfix

기존 브랜치에 origin 저장소의 hotfix 브랜치를 트래킹한다.

$ git switch hotfix
$ git brach -u origin/hotfix

트래킹 브랜치 업데이트 ( git pull )

해당 리모트 브랜치가 업데이트되면 git pull 명령어로 업데이트하면 된다.

$ git pull

리모트 브랜치 삭제 ( git push [remote] --delete [remotebranch]

해당 리모트 브랜치가 필요 없어지면 git push --delete명령어로 삭제해 준다.

$ git push origin --delete hotfix
To https://github.com/tube-jeonghoon/git-test.git
 - [deleted]         hotfix

0개의 댓글