Git

[git] git과 github에 대해 쉽게 이해하기

정이뿡뿡 2026. 6. 2. 08:43

목차

  • git 이란?
  • github 란?
  • 버전관리란?
  • git용어정리
  • git명령어

시작하기 앞서

저는 이번 git을 공부하면서 실무에서 가장 많이 쓰이는 툴이겠구나 라는 직감이 어렴풋이 왔습니다.

그래서 조금도 놓치지 않고 싶다는 생각이 들었고, 

가장 간단하면서 개인적으로 이해하기 어려웠던 부분들을 요약하는 용으로 정리를 해보았습니다.

추후에 시간이 지날수록 추가적으로 깊게 공부하며,
계속 포스팅을 할 예정이니 현재는 약소하게 설명이 되어있더라도 양해부탁드립니다 :)


git이란?

Git(깃)프로그램의 소스 코드 등 파일의 변경 이력을 관리하는 '분산 버전 관리 시스템'입니다.
작업 중인 코드의 버전을 꼼꼼하게 기록하고,
여러 사람이 동시에 같은 프로젝트를 안전하게 협업할 수 있도록 돕는 필수 개발 도구인데요.

프로젝트의 수정내역, 기록, 여러사람이 작업한 프로젝트 병합 등 많은 기능을 제공해준다고

생각하시면 편하게 이해가 되실 겁니다.

 

 

💡  git의 주요특징

  • 버전 관리: 문서를 수정할 때마다 '최종_진짜최종.txt'처럼 파일을 여러 개 만들 필요 없이,
                      하나의 파일 안에서 이전 기록으로 언제든 되돌아갈 수 있습니다. 

  • 분산 저장: 중앙 서버에만 의존하는 것이 아니라,
    작업자 개개인의 컴퓨터(로컬 저장소)에 전체 파일과 변경 이력이 모두 다운로드 및 저장됩니다.
    따라서 인터넷이 연결되지 않은 오프라인 상태에서도 작업과 기록 저장이 가능합니다.
     
  • 협업과 병렬 개발(Branch): 여러 명의 개발자가 각자의 작업 공간(브랜치)에서 코드를 수정하고,
    문제가 없는지 확인한 뒤 원래 코드와 합치는(Merge) 방식을 지원하여
    충돌 없이 효율적으로 협업할 수 있습니다

    ex)

branch 에 대해 쉽게 말씀드리자면, 각각의 방이라고 생각하시면 되요~!

호텔에 비유하면 쉽게 이해가 되실거에요~!

Master branch 라는 메인프로젝트가 있다면 그 안에서 여러가지 프로젝트를 구성하거나
혹은 여러명이 각자의 brach안에서 수정하고 개발하는 개념이에요 :)


github란?

github (깃허브) 는 전 세계의 개발자들이 소프트웨어 소스 코드를
저장, 공유, 수정하고 협업할 수 있도록 돕는
웹 기반의 ‘버전 관리’ 호스팅 플랫폼입니다.


여러게임을 다운로드하고, 정보를 공유하고, 창작마당에서 모드를 창작할수있는

Steam처럼 이해하니 빠르게 이해가 되더라구요.

 

💡github 핵심 개념 및 특징

 
  • Git 기반: 개발자의 컴퓨터에서 코드의 변경 이력을 관리해 주는
    'Git'이라는 시스템을 웹에서 사용할 수 있게 해주는 서비스입니다.
     

  • 버전 관리: 코드 수정 내역을 기록하여 실수로 코드를 망치더라도 이전 상태로 쉽게 되돌릴 수 있습니다.
  • 개발자들의 SNS이자 이력서: 자신의 코드를 공개(오픈소스)하거나 다른 개발자와 소통할 수 있어,
    개발업계에서는 사실상 개인의 포트폴리오(이력서)처럼 활용됩니다.
  • 원활한 협업 (Pull Request): 여러 사람이 동시에 같은 프로젝트를 수정해도 충돌 없이 코드를 합치고
    검토(코드 리뷰)하는 기능을 제공합니다.
     

버전관리 란?

파일이나 프로젝트의 변경 이력을 시간에 따라 기록하고 추적하여,
언제든지 이전 상태로 되돌리거나 여러 갈래의 작업 흐름을 효율적으로 관리하는 체계적인 방법
입니다.

ex) 

저는 gitdesktop을 사용했는데, 보시는바와 같이 history에 제가 수정한 부분들을 한번에 볼수있습니다.

하나의 파일안에서 언제든지 제가 수정했던 부분으로 돌아가 다시 재 수정을 할수도있고,

그 상태를 불러와 배포를 할수도 있는데, 배포에대한건 추후에 설명을 드릴예정이니 

지금은 요정도만 이해하고 넘기셔도 됩니다 :) 

 

버전관리에는 총 3가지 방법이있습니다.

 

1. 로컬버전관리 (LVCS) : 네트워크나 외부 서버 없이,
자신의 개인 컴퓨터(로컬 환경) 안에서 파일의 변경 이력과 버전을 관리하는 시스템

💡 주요 특징

오프라인 작업: 서버에 연결할 필요 없이 독립적으로 작동하므로 인터넷이 없는 환경에서도 사용할 수 있습니다.

데이터베이스 기반: 로컬 컴퓨터 내에 간단한 데이터베이스를 구축하여 파일의 수정 사항과 시간 흐름을 기록합니다.

쉬운 복구: 파일이 손상되거나 이전 내용으로 돌아가야 할 때, 기록된 특정 시점의 버전을 다시 불러올 수 있습니다. 


 

2. 중앙집중식 버전관리 (CVCS): 하나의 중앙 서버에 모든 파일과 버전 히스토리를 저장하고, 다수의 개발자가 중앙 서버에 접속하여 파일을 가져오거나 수정 사항을 업로드(Commit)하여 협업하는 방식

출처 : Jongya

💡 주요 특징

단일 중앙 서버: 모든 데이터(프로젝트 파일 및 변경 이력)는 오직 중앙 서버에만 저장 됩니다.

클라이언트-서버 구조: 개발자(클라이언트)는 작업 전 중앙 서버에서 필요한 파일을
                                     자신의 로컬 컴퓨터로 다운로드(Checkout)하여 작업합니다.


3. 분산버전관리 (DVCS): 개발자 각자의 컴퓨터(로컬)에 프로젝트의 전체 이력과 파일 변경 사항을 복제하여 저장하는 소프트웨어 관리 방식입니다.

중앙 서버에만 의존하는 기존 방식과 달리, 인터넷 연결 없이도 로컬에서 자유롭게 작업 및 버전 기록이 가능합니다. 

출처 : Jongya

 

💡 주요 특징

독립적 작업: 중앙 서버가 다운되거나 네트워크가 끊겨도 로컬 저장소에서 버전 생성 및 변경 이력 조회가 가능합니다. 

뛰어난 안정성: 모든 참여자의 컴퓨터에 전체 프로젝트 이력이 분산 저장되므로, 중앙 저장소에 문제가 생겨도 데이터를 완벽하게 복구할 수 있습니다.

유연한 협업: 다수의 개발자가 각자의 작업 내용을 분산 저장소에 기록한 뒤 필요할 때만 중앙 저장소에 병합(Merge)하여 효율적인 공동 작업이 가능합니다.

 

여기까지 보았을때 그렇다면 저희가 쓰는 git과 github는 어떤 버전관리를 사용하고있는지 감이 오시나요?

바로 분산버전관리 (DVCS)를 사용하고있다는걸 알고만 계시면됩니다 :)


git용어정리

# 로컬 저장소(local repository)

내 PC에서 관리하는 git 저장소

로컬 git 저장소를 만들어주려는 디렉토리로 이동해서 아래 명령어를 실행하면 .git 폴더 생성

$ git init

.git 폴더에 커밋, 스테이지 등 저장소에 필요한 뼈대 파일이 저장되어 있음

 

# 원격 저장소(remote repository)

로컬 저장소를 업로드 하는 곳. ex) GitHub, Bitbucket, GitLab 등

clone 명령어로 기존 원격 저장소를 로컬에 받을 수 있음

$ git clone https://git저장소 주소

 

# 작업 폴더(Working Directory)

작업이 일어나는 폴더 

 

# Staging Area(Index)

작업 폴더에서 작업한 변경 내용을 기록 하는 곳(git 저장소에 commit하기 전에 올려두는 공간)

stage에서 commit을 하게 되면 git 저장소로 변경 내용이 저장됨

 


git 명령어

# status

파일의 상태를 확인하는 명령어

커밋된 파일 & 스테이지에 있는 파일 : tracked

그 외 : untracked

$ git status

 

# add

작업 폴더에서 작업한 변경을 stage에 올릴 때 사용하는 명령어

add한 파일이 tracked 상태가 됨(git이 관리하는 대상이 됨)

파일을 지정해서 올릴 수도 있고, 경로를 지정해서 변경된 모든 파일을 올릴 수도 있음

$ git add 파일1, 파일2
$ git add .
 
# commit

git add 명령어로 스테이지에 추가한 수정 파일을 git 저장소에 저장

주의! 스테이지에 올려놓지 않은(untracked) 파일은 커밋되지 않음

$ git commit -m "커밋 메시지"

 

# push

commit한 파일을 원격 저장소에 올리는 명령어

git push <원격 저장소 이름> <브랜치 이름>

$ git push origin master

 

# fetch

로컬에는 없지만 원격 저장소에 올라가 있는 데이터를 모두 가져옴(업데이트라고 보면 됨)

자동으로 merge 작업을 하지는 않음

git fetch <원격 저장소 이름>

$ git fetch origin

 

# pull

원격 저장소의 데이터를 가져오고, 자동으로 현재 작업하는 로컬 브랜치와 merge

fetch + merge

pull을 수시로!

push 하기 전에 pull을 하지 않으면 이미 원격저장소에 변경사항이 일어났을 때 push에 실패함, 수시로 원격저장소에 있는 변경사항을 pull 받는 것이 충돌 예방에 최선임!

$ git pull origin master
 
# merge

브랜치 병합

현재 작업 중인 브랜치에 합칠 커밋을 지정해서 병합

<commit> 위치에는 주로 병합할 branch 이름을 넣고, 커밋 체크섬을 넣어도 됨(숫자랑 영어로 조합된 40글자 SHA-1 해시 값, 커밋 고유 번호)

$ git merge <commit>
 

# checkout

브랜치 전환

예를 들어 현재 feature 브랜치에서 작업을 하다가 develop 브랜치로 전환을 하려면 아래와 같이 명령어를 실행하면 됨

$ git checkout develop