웹사이트 전체 로고
로고 배경

Git 핵심 정리

헷갈리는 Git 시스템, 핵심 원리 파헤치기

작성자 프로필 사진
kui-o

들어가며

Git과 GitHub는 뭐가 다를까요? Commit과 Push의 차이는 뭘까요?
이 글은 복잡한 이론보다는 직관적인 이해에 초점을 맞춰 작성하였습니다.
끝까지 읽고 나면 둘의 차이를 이해할 수 있을 것입니다.

Git이란

Git(깃)은 한마디로 버전 관리 시스템입니다.
우리가 흔히 아는 GitHub(깃허브)나 GitLab(깃랩)은 바로 이 Git 시스템을 기반으로 서비스를 제공하는 플랫폼입니다.

비유하자면 다음과 같이 얘기할 수 있습니다.

  • Git = 음식 주문 배달 시스템
  • Github, GitLab = 요기요, 배달의 민족

Commit과 Branch

Commit(커밋)은 시점 기록이고, Branch(브랜치)는 Commit의 모음입니다.
(여기서 말하는 Commit은 명사입니다)

비유하자면 다음과 같이 얘기할 수 있습니다.

  • Commit = 세이브 포인트
  • Branch = 평행 우주

Repository

Repository(리포지토리, 레파지토리)는 프로젝트라고 이해하면 쉽습니다.
소스코드 파일, Commit, Branch 등 Git의 전체적인 데이터가 저장돼 있습니다.

Checkout

Checkout(체크아웃)은 Branch를 전환하는 기능입니다.
Branch를 변경하면 그에 맞게 소스코드 파일 내용들이 바뀝니다.

체크아웃 개념도

이것이 의미하는 건 크게 두 가지가 있습니다.

  1. 하나의 Repository에서 동시에 두 개의 Branch를 볼 수 없다
  2. Checkout 하면 Commit 되지 않은 소스코드는 사라질 수 있다

Commit과 Push

Commit(커밋)은 로컬 저장소에 저장하는 기능이고 Push(푸시)는 원격 저장소에 저장하는 기능입니다.
(여기서 말하는 Commit은 동사입니다)

다시 말해 Commit은 작업폴더 → 로컬 저장소이고, Push는 로컬 저장소 → 원격 저장소의 흐름입니다.

Commit은 내 PC에 저장하기 때문에 네트워크가 필요없고 Push는 서버에 저장하기 때문에 네트워크가 필요합니다.

체크아웃 개념도

Pull과 Fetch

Pull(풀)은 원격 저장소의 Branch를 불러온 뒤 로컬 저장소에 반영하는 기능이고, Fetch(페치)는 원격 저장소의 Branch를 불러만 옵니다. (로컬 저장소에는 반영하지 않습니다.)

다른 팀원이 서버에 Push 했을 경우 이 명령어를 써서 동기화할 수 있습니다.

체크아웃 개념도

Merge

Branch끼리 합치는 기능입니다.

Pull Request(풀리퀘스트) 일명 PR이라는 기능도 있는데 Merge 하기 전에 검토할 수 있는 기능입니다.
이건 Git 고유 기능은 아니고 Github에서 추가된 기능인데 많이 사용하니 알아두면 좋습니다.

Clone

Clone(클론)은 Repository를 복사하는 기능입니다.
보통 프로젝트 처음 시작할 때 서버에 있는 Repository를 로컬에 받을 때 씁니다.

Conflict

Conflict(충돌)은 여러 개발자가 같은 부분을 수정했을 때 일어납니다.
이 경우 수동으로 어떤 부분을 반영할지 처리해 줘야 합니다.

마치며

Git을 사용하다 문제가 생겼을 경우 서버에 Push 하기 전이라면 비교적 해결하기가 쉽습니다.
바로 Commit & Push를 하는 것보다 Commit을 먼저 한 뒤 Pull로 충돌을 확인하고 Push 하는 걸 추천합니다.

긴 글 읽어 주셔서 감사합니다.