공사중

쉽게 정리한 Git 사용법 : Tag 사용하기(checkout -b) 본문

개발 | Git

쉽게 정리한 Git 사용법 : Tag 사용하기(checkout -b)

행운개발자 LuckyDeveloper 2019. 2. 21. 15:17

Git의 태그는 Annotated 태그와 LightWeight태그가 있습니다.

LightWeight태그는 브랜치와 비슷하지만 단순히 특정 커밋에 대한 포인터일 뿐입니다. 

Annotated태그는 Git 데이터베이스에 태그를 만든 사람의 이름, 이메일과 태그를 만드 날짜 그리고 태그 메시지까지 저장합니다.

일반적으로는 Annotated을 사용하고 이런 정보를 유지할 필요가 없을 때는 LightWeight를 사용합니다.


먼저 지금까지 만들어 놓은 태그가 있는지 보겠습니다.

git tag

당연히 아직 만든 태그가 없습니다. 


Anootated 태그를 만들기 위해서는 -a 태그를 추가합니다. -m를 사용해서 메시지를 지정할 수 있습니다.

git tag -a v1.4 -m "my version 1.4"


git show v1.4 명령으로 태그 정보와 커밋 정보를 모두 확인할 수 있습니다. 

아래 예시는 태그를 만들고, 만든 태그 목록은 확인한 뒤에 특정 태그에 대한 정보를 확인하는 과정입니다.

git show [태그 이름]

을 입력하면 태그에 대한 정보와 커밋에 대한 정보 모두 볼 수 있습니다.



LightWeight 태그를 만들기 위해서는 -a -m 들의 옵션을 추지 않으면 됩니다.

git tag [LightWeight로 지정할 태그의 이름]


아래 예제에서 입력한 v1.1-lw까지 모두 태그의 이름입니다. LightWeight임을 명시하기 위해서 이름에 -lw를 붙힌 것입니다.

LightWeight 태그를 show하면 Annotated 태그와 달리 태그를 만든 사람의 정보 등이 없이 커밋에 대한 정보만 볼 수 있는 것을 알 수 있습니다.

이전에 만들었던 커밋에 태그를 만들고 싶으면 그 커밋을 checkout하고 태그를 만들면 됩니다.

혹은 아래와 같이 커밋에 대한 체크썸을 확인한 다음에 아래의 포멧을 맞추면 됩니다.

git tag -a [태그이름] [체크썸, 체크썸을 모두 적지는 않아도 됨]

체크썸을 확인하고


이렇게 이전 커밋에 대한 태그를 만들 수 있습니다. 


(위에서는 --oneline이라는 속성에 의해서 체크썸이 모두 출력되지 않았습니다. 원래는 체크썸은 이렇게 깁니다.) 


원격 저장소에 태그를 공유할 수 도 있습니다. 하지만 

git push

만으로는 태그 정보가 같이 원격 저장소에 Push 되지 않습니다. 아래와 같은 방법으로 Tag도 같이 push할 수 있습니다.

git push origin v1.2


만약 한 번에 태그를 여러개 Push하고 싶다면 --tags 옵션을 사용합니다. 

git push origin --tags

이 명령을 사요하면 서버에 없는 태그를 모두 전송합니다. 이제 누군가가 원격 저장소에서 clone을 하면 모든 태그 정보고 함께 받아볼 수 있습니다.



태그는 브랜치와 달리 가리키는 커밋을 바꿀 수 없는 이름이기 때문에 Checkout을 할 수 없습니다. 태그가 가리키는 특정 커밋 기반의 브랜치를 만들어 작업하려면 아래와 같이 진행하며 됩니다.


아 캡쳐를 보기전에 아래 명령어를 봐주세요. 이 명령어는 새로운 브랜치를 만들고 동시에 그 브랜치로 checkout 하는 명령어입니다.

git checkout -b [새로운 브랜치 이름]



먼저 현재의 상태를 확인하고 version2라는 브랜치를 만들면서 이 브랜치를 checkout하고 싶었습니다. 그리고 이 태그를 v2.0이라고 이름을 붙히고 싶었는데 이렇게는 할 수 없었습니다. 

이 명령어는 새로운 브랜치를 만들고 동시에 그 브랜치로 checkout 하는 명령어입니다.

라고 했던 의미는 "이미 생성되어있는 태그가 가리키는 커밋에서 브랜치를 만들고 바로 chekcout을 할 수 있다."였음이 명확해졌습니다. 


git checkout -b version2 v1.0

이라는 명령어를 통해서 이미 생성된 태그 v1.0이 가리키고 있는, 체크썸 2d354c5를 가지는, 커밋에서 version2라는 브랜치를 만들고 그 브랜치로 체크아웃 했습니다. 


한 번 더 해보았습니다.

version2 브랜치에서 log를 찍어보고,

v1.3이 가리키는 위치에서 브랜치 version4을 만들면서 chekcout 했습니다. 

version4에서 log를 찍어보면 이 때 이전의 히스토리만 출력되는 것을 보실 수 있습니다.

다시 전체를 보기 위해서 version2를 checkout 하고 다시 log를 찍어보면 전체 모습을 볼 수 있습니다.