평소에는 Git을 로컬에서 저장과 버전을 관리하기 위해서 사용을 했었지만, 이번에 깃을 좀 더 잘 활용할 수 있는 기회가 생겨서 공부해보려고 합니다.
우아한Tech 10분 깃코톡 🎲 와일더의 Git Commands 을 통해서 깃 명령어에 대한 기초 그림을 그릴 수 있었습니다. 해당 유튜브 영상에서 러닝 깃 브랜칭 사이트에 대한 추천을 해주셔서 실제 학습하면서 더 공부할 수 있었습니다!!
러닝 깃 브랜칭 사이트. 약 2~3시간정도 걸리는 과정이며, 이미지와 애니메이션으로 명령어를 통한 커밋들이 어떻게 움직이는지 알기 쉽게 되어있습니다. 그리고 명령어를 활용한 여러가지 응용문제들이 있어서 이해를 하기 쉬웠습니다.👍
학습할 수 있는 과정들은 다음 사진과 같습니다.
git merge <합치고_싶은_브랜치>
두 가지의 브랜치를 합치는 방법 중에 하나입니다.
![]() |
![]() |
git rebase <합치고_싶은_브랜치>
두 브랜치를 합치는 두번째 방법은 리베이스입니다. 커밋들을 모아서 복사한 뒤, 다른 곳에 놓는 과정입니다.
![]() |
![]() |
개발 커뮤니티에서 merge를 하는것과 rebase 사이의 트레이드 오프에 대해 많은 논의가 이루어지고 있습니다. 각각이 가지는 장단점이 있기에 잘 선택해서 사용하는 것이 중요하겠습니다.
merge
rebase
대체적으로 외국에서는 merge를 선호하고 한국에서는 rebase를 선호한다고 합니다
HEAD는 현재 체크아웃된 커밋을 가리킵니다.다시 말하자면 현재 작업중인 커밋입니다. HEAD는 항상 작업트리의 가장 최근 커밋을 가리킵니다. 작업트리에 변화를 주는 git 명령어들은 대부분 HEAD를 변경하는것으로 시작합니다.
git checkout <대상>
한번에 한 커밋 위로 움직이는 ^
git checkout <대상>^
한번에 여러 커밋 위로 올라가는 ~num
git checkout <대상>~<올리고_싶은_숫자>
![]() |
![]() |
git reset <커밋>
git reset은 브랜치로 하여금 예전의 커밋을 가리키도록 이동시키는 방식으로 변경 내용을 되돌립니다. 이런 관점에서 "히스토리를 고쳐쓴다"라고 말할 수 있습니다. 즉, git reset은 마치 애초에 커밋하지 않은 것처럼 예전 커밋으로 브랜치를 옮기는 것입니다.
![]() |
![]() |
git revert <커밋>
각자의 컴퓨터에서 작업하는 로컬 브랜치의 경우 리셋(reset)을 잘 쓸 수 있습니다만, "히스토리를 고쳐쓴다"는 점 때문에 다른 사람이 작업하는 원격 브랜치에는 쓸 수 없습니다.
![]() |
![]() |
git cherry-pick <커밋1> <커밋2> <...>
현재 위치(HEAD) 아래에 있는 일련의 커밋들에대한 복사본을 만들겠다는 것을 간단히 줄인 말입니다. 원하는 커밋들을 골라담아올 수 있다는 장점이 있습니다.
![]() |
![]() |
git rebase -i <대상>~<수정_개수>
인터렉티브 리베이스가 의미하는 뜻은 rebase 명령어를 사용할 때 -i 옵션을 같이 사용한다는 것입니다.
인터렉티브 리베이스 대화창이 열리면, 3가지를 할 수 있습니다:
![]() |
![]() |
git tag <태그_이름> <커밋_위치>
Git 태그는 특정 커밋들을 브랜치로 참조하듯이 영구적인 "milestone(이정표)"으로 표시합니다.
중요한 점은, Git 태그는 커밋들이 추가적으로 생성되어도 절대 움직이지 않는다는 것입니다. 태그는 커밋 트리에서 특정 지점을 표시하기위한 닻같은 역할을 합니다.
git clone <저장소>
git clone은 원격 저장소의 복사본을 로컬에 생성할때 사용하는 명령어입니다.
![]() |
![]() |
git fetch <브랜치>
원격 저장소에서 데이터를 가져오는 명령어를 git fetch라고 불립니다.
![]() |
![]() |
git pull <브랜치>
원격 저장소의 변경을 fetch하고 그이후에 merge하는 작업의 과정을 한번에 하는 명령어가 git pull 입니다.
![]() |
![]() |
git push <브랜치>
git push는 변경을 원격 저장소에 업로드하고 그 원격 저장소가 변경된 새 커밋들을 합치고 갱신하게 합니다. git push가 끝나고 나면, 다른 사람들이 원격 저장소에서 해당 작업을 내려받을 수 있게 됩니다.
![]() |
![]() |