Skip to main content

git 사용법

· 9 min read
Jae Jun, Jo

중요한 순간을 영원히 남길 수 있는 도구가 무엇일까요.

그것은 카메라입니다.

git도 그렇습니다.

우리는 여행을 하는 것과 같이 색다른 경험을 할 때, 사진을 찍습니다.

코드도 마찬가지입니다. 색다른 경험을 하게 되면 (새로운 기능을 구현하면)

그 순간을 찍을 것입니다.

근데 이 코드 카메라(git)는 실제 카메라의 셔터만 눌려서 찍는 것과는 사용법이 좀 복잡합니다.

명령어부터 시작해서 차근차근 알아가보겠습니다.

명령어 설명

-h (--help)

카메라를 사면 설명서를 줍니다. 대부분이 안 읽고 버리겠지만,

한번 이상은 읽어줍시다.

add

우리가 사진을 찍기전 어떻게 하는지 생각해보면, 찍는 대상은 포즈를 취합니다. 혹은 어떤 자세를 잡고 있을 수도 있습니다.

찍는 사람은 찍고 싶은 구도로 카메라를 위치 시켜 촬영을 준비할 것입니다.

이러한 과정을 git에서는 add를 이용합니다.

장면을 담기전 해당 장면을 향해 있는 것 처럼

변경된 코드들을 추적하여 셔터를 누르기 전 상태로 만드는 명령어입니다.

git add . // 주로 .을 이용하여 전체 변경점들을 한번에 담습니다.

commit

카메라는 대상을 향하고 있고 촬영자는 모든 준비가 되었습니다. 이 상태에서 셔터 한번만 누르면 해당 장면이 촬영됩니다.

요즘에 스마트폰으로 사진을 촬영하면 촬영 일시, 촬영 장소, 심지어는 어떤 기종으로 찍었는가에 대해서도 기록할 수 있습니다.

git에서도 해당 코드를 변경한 사람, 변경한 일시, 변경한 위치를 명시할 수 있습니다.

이와 같은 기능으로 git에서는 commit을 이용합니다.

git commit -m "<기록할 내용>"

branch, checkout

사진을 찍고나서 해당 사진을 범주에 따라 카테고리화 시킬 수 있습니다.

예를 들어 21년 12월에 찍은 사진들은 21.12 라는 폴더에 저장 시킬 수 있습니다.

git에서는 이 기능을 branch, checkout을 통해 지원합니다.

branch 명령어는 주로 브랜치의 상태 확인 및 관리를 위한 용도며

checkout 명령어는 주로 브랜치를 선택하는 용도입니다.

대표적으로,

git branch -M <변경할 브랜치명>

브랜치의 이름을 변경할 때 사용할 수 있습니다.

git checkout <브랜치명>

push

스마트폰으로 촬영된 사진은 아이 클라우드, 구글 포토에 저장 시킬 수 있습니다.

이러한 클라우드 서비스로 저장된 사진은 인터넷과 연결되어 있으면 어디에서나 접근이 가능합니다.

클라우드에 저장시키는 과정이 push와 비슷합니다.

git push <원격저장소위치> <브랜치명>

사진을 아이 클라우드, 구글 포토 등 선택해서 저장할 수 있는 것처럼 <원격저장소위치>를 지정하여 저장할 수 있습니다.

pull

push와 반대입니다. 클라우드에 있는 사진을 다운로드 하는 것처럼

pull을 하게 되면 브랜치의 커밋들을 내려받게 됩니다.

pull은 좀있다 나올 fetch와 merge의 합성된 형태의 명령어입니다.

git pull <원격저장소위치> <브랜치명>

fetch

아쉽게도 카메라의 개념에서 이 fetch와 비슷한 역할을 하는 기능은 없습니다.

조금 다르게 설명해보자면 카메라는 항상 클라우드에 연결할 필요가 없습니다. git도 마찬가지로 항상 원격 저장소에 연결할 필요가 없습니다.

(여기서 항상 연결할 필요가 없다라는 말은 항상 실시간 통신을 할 필요가 없다라는 의미입니다.)

하지만 git은 원격저장소와 연결되어 있지 않더라도 원격 저장소와 같은 역할을 수행하는 또 하나의 임시 저장소를 필요로 합니다.

그 임시저장소에서만 원격 저장소의 내용을 반영하고 싶을 때, fetch 명령어를 씁니다.

git fetch --prune

merge

브랜치를 카메라의 폴더라고 설명했었습니다. 12.04, 12.05 와 같이 월별로 나누었던 폴더를 연도로만 합칠 수도 있습니다.

그러면 12월 폴더 하나로 12.04, 12.05 사진들을 볼 수 있을 것입니다.

이렇게 브랜치를 합치는 기능은 merge로 수행합니다.

git merge <붙게할 브랜치>

지금까지는 명령어에 대해서만 알아보았고 상황별 명령어를 알아보겠습니다.

작업 시작전

새로운 브랜치 생성

git checkout main
git pull origin main
git checkout -b sub

원격 브랜치 이용해서 브랜치 생성

git fetch --prune
git checkout -t origin/<브랜치명>

작업 도중

현재 브랜치에서 특정 브랜치의 작업 내역을 받아 오고 싶을 때

git pull origin <브랜치명>

현재 작업 사항을 이전 커밋에 합치고 싶을 때

git add .
git commit --amend

직전 커밋을 취소하고 해당 변경사항을 다시 수정하고 싶을 때

git reset --soft HEAD^

직전 커밋을 취소만 할 때

git reset --hard HEAD^

브랜치 생성 안하고 작업 했을 때

git branch -M <브랜치명> // 현재 작업중인 브랜치 명을 변경합니다.
git checkout -t origin/<이전브랜치명> // 브랜치 명이 변경되어서 base 브랜치가 없어졌으므로 다시 만들어 줍니다.
git checkout <브랜치명> // 원래 작업중이었던 곳으로 돌아갑니다.

이와 같이 git을 카메라로 본다면 기능 하나하나의 필요성을 느낄 수 있을 것입니다.

백문이 불여일견이라고 git 연습용 레포하나 파서 이것저것 해보시면 더 좋습니다!

다음 포스팅으로 원격저장소인 github와 주요 기능 중 하나인 PR에 대해서 작성하겠습니다.