본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Git은 분산형 버전 관리 시스템(Distributed Version Control System, DVCS) 중 하나로, 현재 전 세계적으로 가장 많이 사용되고 있는 버전 관리 시스템(혹은 형상 관리 시스템)이다. Git은 빠르고 안정적이며, 대부분의 운영 체제에서 사용할 수 있다.

Git은 소스 코드의 변경 사항을 추적하고, 변경 내용을 저장하고, 변경 내용을 다른 사람들과 공유하는 데 사용된다. Git은 변경 내용을 "커밋(commit)" 단위로 저장하며, 각 커밋은 그 시점 프로젝트 파일 전체의 모습인 스냅숏을 가리키며, 변경 내용에 대한 메시지와 함께 저장된다. CVS·Subversion 같은 다른 버전 관리 시스템이 파일마다 기준 버전에 대한 변경분(델타)을 쌓아 저장하는 것과 다른 점이다. 커밋할 때 바뀌지 않은 파일은 다시 저장하지 않고 이미 저장된 같은 파일을 가리키기만 한다.[1] 나중에 git gc 나 push 때 여러 객체를 팩파일(packfile) 하나로 묶으면서 비슷한 객체끼리 델타 압축을 하기도 하지만, 이것은 저장 공간을 줄이는 보관 방식일 뿐 버전을 델타로 관리하는 것이 아니다.[2] 그래서 "Git 은 버전 간 차이인 델타를 이용해 공간을 절약한다"는 설명은 Subversion 같은 델타 방식에 맞는 말이다. 이를 통해 개발자들은 소스 코드의 변경 이력을 추적하고, 이전 버전으로 되돌릴 수 있다.

Git은 또한 브랜치(branch)라는 개념을 사용하여 개발자들이 동시에 다양한 기능을 개발할 수 있도록 한다. 브랜치를 사용하면 개발자들은 독립적으로 작업을 수행하고, 작업이 완료되면 다시 본선 브랜치(main branch)에 병합(merge)할 수 있다.

Git은 협업을 위한 다양한 기능도 제공한다. 예를 들어, Git은 원격 저장소(remote repository)를 지원하여 다른 개발자들과 소스 코드를 공유하고, 변경 내용을 통합할 수 있다. 또한 Git은 이슈 트래커(issue tracker)를 지원하여 버그를 추적하고, 문제를 해결하는 데 도움을 준다.

Git은 오픈 소스 프로젝트로 시작되었으며, 현재는 다양한 기업에서 사용되고 있습니다. Git은 GitHub, GitLab, Bitbucket 등의 서비스와 함께 사용된다.

브랜치와 HEAD

편집 원본 편집

Git 은 커밋을 스냅숏으로 저장하고 각 커밋은 부모 커밋을 가리킨다. 브랜치는 이 커밋 가운데 하나를 가리키는 가볍게 움직이는 포인터일 뿐이다. 처음 커밋하면 기본 브랜치(전통적으로 master, 요즘은 main 으로 바꾸어 쓰기도 한다)가 생기고, 커밋할 때마다 그 브랜치 포인터가 새 커밋으로 자동으로 옮겨 가 늘 가장 최근 커밋을 가리킨다. master 는 특별한 브랜치가 아니라 git init 이 기본으로 만들어 줄 뿐인 보통 브랜치다. 지금 작업 중인 브랜치는 HEAD 라는 특수 포인터가 가리킨다.[3]

  • 브랜치 만들기 - git branch topic 은 현재 커밋을 가리키는 새 포인터를 만들 뿐 그 브랜치로 옮겨 가지 않는다
  • 브랜치 옮기기 - git checkout master(또는 git switch master)로 HEAD 를 master 로 옮기고 작업 디렉터리를 그 커밋의 상태로 바꾼다 → Git checkout
  • 병합 - 토픽 브랜치에서 커밋해도 다른 브랜치에는 아무 일도 일어나지 않는다. master 에 합치려면 master 로 옮긴 뒤 git merge topic 을 실행해야 한다. 커밋이 자동으로, 또는 커밋할 때마다 단계적으로 병합되지 않는다 → Git merge
  • 임시 저장 - 커밋하지 않은 변경이 있는 채로 다른 브랜치로 옮겨야 할 때 git stash 로 작업 내용을 스택에 치워 두고, 돌아와서 git stash pop(또는 apply)으로 되살린다[4] → Git 명령어
  1. ↑ Scott Chacon, Ben Straub, 『Pro Git』 2판, 1.3 What is Git? - Snapshots, Not Differences, https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F, 확인일: 2026-11-05.
  2. ↑ Scott Chacon, Ben Straub, 『Pro Git』 2판, 10.4 Git Internals - Packfiles, https://git-scm.com/book/en/v2/Git-Internals-Packfiles, 확인일: 2026-11-05.
  3. ↑ Scott Chacon, Ben Straub, 『Pro Git』 2판, 3.1 Git Branching - Branches in a Nutshell, https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell, 확인일: 2026-11-04.
  4. ↑ 「git stash」, Atlassian Git Tutorial, https://www.atlassian.com/git/tutorials/saving-changes/git-stash, 확인일: 2026-11-04.