2019.08.19 Git 튜토리얼 보며 따라하기 - Tag, Branch(1)

Git Tag

Lightweight 태그와 Annotated 태그로 두 종류가 있다.

1) lightweight tag : 일반적으로 사용하는 가벼운 느낌의 태그 

명령어는 git tag NAME

2) annotated tag : 태그를 붙이면서 메타정보들도 같이 포함시킴
명령어는 git tag -a NAME

주의할 것은 git push 를 하더라도 Remote 서버에 자동으로 태그까지 전송하지는 않는다.
태그를 만들었으면 서버에 별도로 Push 해야 하며 브랜치를 공유하는 것과 같은 방법으로 할 수 있다. 
특정 태그만을 보내고 싶다면 `git push origin <태그 이름>`
전부 다 보내고 싶다면  `git push origin --tags`


2. Git Branching


1) Merge를 할 때 fast forward란? 

Fast Forward는 커밋 그래프에서 뒤쳐진 커밋을 가리키는 포인터를 그저 앞으로 옮겨주는 역할만 한다.

master 브랜치의 A 커밋에서 hotfix 라는 브랜치를 새로 생성해서 B 커밋을 올렸다고 하자. 

이 때 master 브랜치는 A 커밋을 가리키고 있는 상태인데 여기에 hotfix 브랜치를 merge한다면 같은 Commit의 줄기를 타고 있는 녀석들이기 때문에 master의 포인터만 새로 생성한 B 커밋으로 옮겨주게 된다.

즉 빠른곳으로(Fast) 보낸다(Forward)


2) git fetch origin

origin/master에 있는 커밋을 A와 B가 각각 clone한 상태에서 둘 다 작업을 시작했고 A는 origin에 Push까지 했다. 하지만 B는 이 사실을 모른다. 그래서 B의 master 브랜치는 clone했던 때의 커밋을 가리키고 있다.

이 때 git fetch origin을 하면,현재 로컬의 저장소가 갖고 있지 않은 새로운 정보가 있으면 모두 내려받고, 받은 데이터를 로컬 저장소에 업데이트하고 나서, origin/master 포인터의 위치를 최신 커밋으로 이동시킨다.

눈여겨 볼 것은, 현재 master 브랜치를 업데이트 시키는 것이 아니고 origin/master의 포인터에 변경을 가하는 것이다.

fetch 명령어는 리모트로부터 변경 가해진 내역들을 모두 불러오는 기능을 수행한다. 단, 현재 작업저장소에 merge까지 하지는 않는다. 

git fetch & git merge -> git pull과 같다.

댓글

이 블로그의 인기 게시물

로컬 Tomcat 서버 실행속도 개선

2019.05.23 - SQLAlchemy 의 객체 상태 관리 (expire, refresh, flush, commit) 에 관한 이해

2020.02.17 Python의 multiprocessing 중 Pool.map(), chunksize에 관한 내용