본문 바로가기
공부/CS

[CS] git 명령어들

by 초코팅촉 2023. 11. 28.
728x90

이번에는 git의 명령어들을 알아보고자 합니다.

한국어로도 자주쓰는건 괄호에 한국어도 같이 써놓을게요.

 

일단 처음엔 간단하게

 

commit(커밋)

의미 있는 변화에 대한 기록.

다시 말해 내가 작성한 소스코드가 뭔가 기록할만한 가치가 있을때 하는게 커밋입니다.(커밋을 남발하지 맙시다)

 

push

로컬에서 작업하던걸 원격 저장소에 업로드합니다.

 

pull

원격 저장소에 있던걸 로컬로 끌어옵니다.

 

tag

애자일 방법론에 따른 마일스톤(milestone)을 달성시에 저장소에 지정해 추적 가능하도록 한것.

별거 아니고 그냥 뭐 예를들어서...

공식 릴리즈, 버그 픽스 완료 등 이런 뭔가 이벤트가 있을거 아녜요, 그쵸?

그럴때 tag를 달아줘서 "아 이땐 이랬구나" 이런걸 확인하는 용도로 쓰는겁니다.

 

branch(브랜치)

한글로 가지라고 하죠?(나뭇가지말입니다, 🍆이거 말고;;사실 가지도 요리 잘하는 사람이 하면 맛있어요)

나뭇가지 말고도 분기도 있습니다. 분기가 길이 갈라지는 시점을 의미하죠? 나뭇가지랑 유사하죠? 그런겁니다.

일반적으로 맨처음에 만들어진 분기를 main이라고 하죠, 그리고 새로 분기를 만들때 branch 명령어를 씁니다.

git branch [이름]

추가로 -f 옵션을 붙이면 현재 HEAD가 있는 커밋으로 해당 이름의 브랜치를 강제로 가져와 현재 있는 커밋이 해당 브랜치가 됩니다.

 

HEAD

현재 내가 작업중인(바라보고 있는) 커밋 혹은 브랜치를 HEAD라고 합니다.

 

merge

뜻은 합치기. 말그대로 새로 만든 브랜치를 기존 브랜치에 합칠때 씁니다.

꼭 main브랜치에 합칠때 뿐만 쓰는게 아닙니다. 그냥 브랜치끼리 합칠때 쓰는겁니다.

git merge A

이런식으로 쓰고, 작동방식은 "현재 있는 브랜치에 A를 합치겠다" 입니다.

한마디로 지금 현재 위치해있는 브랜치가 베이스가 되는거죠

 

checkout

현재 HEAD를 다른 커밋, 브랜치로 옮길때 씁니다.

git checkout [이름]

 

^(상대참조)

^는 상대적인 위치를 참조할때 씁니다.

예시를 봅시다.

git checkout HEAD^

이렇게 하면 바로 전의 부모 브랜치로 이동합니다.

 

~(상대참조)

~도 상대적인 위치를 참조할때 씁니다.

예를들어

git checkout HEAD~4

를 실행하면 현재 HEAD에서 전의 4번째 커밋으로 이동합니다.

 

반면에 ~과 ^를 같이쓰면 좀 다른 결과가 나오는데요, 일단 예시를 봅시다.

git checkout HEAD~^2

앞서 ^는 바로 위의 브랜치로 이동한다했죠? 그래서 바로 이전 브랜치로 이동하긴 하는데 2는 뭘까요???

바로 두번째 부모 브랜치로 간다는 뜻입니다.

이럴라면 일단 merge를 해서 부모 브랜치가 여러개일때 가능하겠죠?

 

cherry-pick

우선 체리픽은 이런식으로 씁니다.

git cherry-pick [복사를 원하는 첫번째 커밋해시] [복사를 원하는 두번째 커밋해시] ...

현재 HEAD가 있는 커밋의 뒤에 붙이고 싶은 커밋들을 갖다 붙이는 기능입니다.

 

reset

리셋은 간단합니다. 내가 현재 커밋을 없애버리고 싶을때, 없던일로 하고싶을때 커밋을 취소하기위한 기능입니다.

git reset HEAD~1
git reset HEAD^

이런식으로 쓰며 둘은 같은 결과를 냅니다.

 

revert

revert도 현재 커밋을 취소할 때 쓰는데, 대신 내가 지금 있는 커밋을 히스토리로 남깁니다.

git revert HEAD^

이런식으로 쓰는데 이렇게 하면

0-1(돌아가려는 커밋)-2(현재 있고 없애려는 커밋)

이랬던게

0-1(돌아가려는 커밋)-2(없애려는 커밋)-3(두번째의 돌아가려는 커밋의 내용을 담은 커밋)

이렇게 됩니다.

 

Rebase(리베이스)

re + base

base를 다시 어쩌구 하겠다!

그런뜻입니당.

하지만 직관적으로 바로 이해하기에는 제가 이해한 방식이 좋을것 같아요.

(현위치에 있는것들 중에) rebase(골라서) [hash](갖다 붙일 위치)

 

더 더 쉽게 설명해드리면 어디가 됐던 현위치가 있겠죠?

그러면 현위치에서 rebase를 쓰면 현재 내가 있는 위치의 브랜치에 있는 커밋들중에 골라서

hash의 뒤에 갖다 붙여서 베이스를 다시 만들어내겠다! 이런겁니다.

우선 지금 c2에 main에 HEAD가 있죠?

우리는 rebase를 통해 main에 bugFix를 붙이고 싶어요.

git checkout bugFix// 그렇다면 일단 여기서 HEAD만 bugFix로 넘어가서
git rebase main // main에다가 rebase해줍시다.

 

쉽죠??

 

일단은 여기까지 하고 앞으로 추가할 내용이 있다면 추가로 더 알려드릴께요!

 

cs - git, github, 명령어