소프트웨어 개발에서 소스 코드의 변경 사항을 추적하는 데 널리 사용되는 분산 버전 관리 시스템.
리눅스 개발, 협업과 코드 관리를 위한 강력한 도구로서 개발자들 사이에서 널리 사용됨.
개념
- 리포지토리(Repository)
- Git에서 프로젝트 코드와 해당 변경 이력이 저장되는 곳.
- 로컬 리포지토리와 원격 리포지토리가 있음.
- 커밋(Commit)
- 코드나 파일의 변경 사항을 리포지토리에 저장하는 행위
- 각 커밋은 고유한 ID를 가지며, 변경 내역, 작성자, 날짜 등의 정보를 포함.
- 브랜치(Branch)
- 개발의 분기점을 만들어 다양한 기능을 독립적으로 개발할 수 있게 해줌.
- 기본적으로 'master' 또는 'main' 브랜치가 주요 브랜치로 사용.
- 병합(Merge)
- 다른 브랜치에서 개발한 내용을 합치는 과정.
- 충돌(conflict)이 발생할 수 있으며, 수동으로 해결해야 할 수 있음.
소스 코드 관리 단계

작업 디렉토리(Working Directory)
- 개발자가 실제로 파일을 수정하고 작업하는 공간
- 이곳에서 코드를 수정하거나 새 파일을 생성하는 등의 작업이 이루어짐
- 이 단계에서의 변경 사항은 아직 Git에 의해 추적되지 않음
스테이징 에어리어(Staging Area)
- 작업 디렉토리에서 변경된 파일 중 Git에 기록하기를 원하는 파일을 선택하여 스테이징 영역으로 이동시키는 단계
- git add [파일명] 명령어 사용
- 스테이징 영역은 커밋으로 확정짓기 전에 변경 사항을 임시로 저장하는 곳
- 올라간 변경 사항만이 다음 단계인 커밋에 포함됨.
커밋(Commit)
- 스테이징 영역에 추가된 변경 사항들을 리포지토리에 기록하는 단계
- git commit 명령어를 사용하여 이 과정을 수행하며, 일반적으로 -m 옵션을 사용해 커밋 메시지를 함께 작성
- 커밋을 하면 Git은 해당 시점의 스냅샷을 저장하며, 이 스냅샷은 나중에 특정 버전으로 돌아가거나 변경 내역을 검토할 때 사용됨.
리포지토리(Repository)
- 커밋된 변경 사항들은 로컬 리포지토리에 저장
- 로컬 리포지토리는 개발자의 컴퓨터에 위치하며, 여기에는 프로젝트의 모든 커밋과 변경 이력이 포함.\
파일의 상태 변화

Untracked (추적되지 않음)
- 새로 생성된 파일은 Git에 의해 관리되지 않는 상태임.
- Git 디렉토리에 존재하지만, 아직 버전 관리 대상으로 추가되지 않음.
Add file (파일 추가):
- git add [파일명] 명령어를 사용하여 파일을 Staging Area(스테이징 영역)에 추가
- 파일이 추적되기 시작하며, 다음 커밋에 포함.
Unmodified (수정되지 않음)
- 파일이 커밋되어 Staging Area와 Repository에 저장된 후, 아직 수정되지 않은 상태
- 이 상태의 파일은 Git에 의해 추적되고 있지만, 마지막 커밋 이후 변경사항이 없음
Modified (수정됨)
- 기존에 추적되고 있는 파일에 변경사항이 발생했을 때
- 변경사항이 아직 Staging Area에 추가되지 않았기 때문에 다음 커밋에는 포함되지 않음
Staged (스테이징)
- 수정된 파일을 다시 git add [파일명] 명령어로 Staging Area에 추가하면 파일은 스테이징 상태가 됨
- 이 상태의 파일은 다음 커밋에 포함될 준비가 완료된 상태
Remove the file (파일 삭제)
- 파일을 삭제할 경우, 삭제된 파일도 git add [삭제된 파일명] 명령어를 사용하여 스테이징 영역에 추가해야 함
- 스테이징 영역에 추가된 삭제된 파일은 다음 커밋에 파일이 삭제된 상태로 기록
Edit the file (파일 편집)
- 파일을 수정하는 행위는 파일을 Modified 상태로 만듬
- 수정된 내용을 커밋에 포함시키기 위해서는 다시 스테이징 과정을 거쳐야 함
Stage the file (파일 스테이징)
- 수정된 파일을 git add 명령어로 스테이징 영역에 추가하는 과정
- 이 과정을 통해 파일은 다음 커밋에 포함될 준비를 마침
Commit (커밋)
- 과거에 커밋 프로젝트의 특정 시점으로 돌아갈 수 있음
'[프로그래밍] Git' 카테고리의 다른 글
[GIT] 원격 저장소 관리 (0) | 2024.05.08 |
---|---|
[GIT] Branch (0) | 2024.05.08 |
[GIT] git 사용법 (0) | 2024.05.08 |