'
본문 바로가기
study/Git&Github

[Git & GitHub] - Git 기본 개념과 핵심 사용법 익히기

by meowdule 2025. 1. 29.

 

1. Git & Github 내부 구조 이해하기

 

Git & Github 는 파일 관리와 버전 관리를 위해 네 가지 주요 공간으로 구성됩니다.

 

주요 공간 개념:

  • 작업 트리 (Working Tree)
    • 로컬 디렉토리에 존재하는 소스 코드가 있는 프로그램 작성 파일
    • 개발자가 로컬 환경에서 주로 편집하고 사용하는 공간
  • 스테이징 영역 (Staging Area, Index)
    • 작성한 소스 코드를 git에 커밋하기 전에 보관하는 임시 공간
    • 커밋할 버전에 포함할 변경 사항 선택/수정하기 위함
    • git add 명령어로 파일을 추가
  • .git Directory (Repository)
    • 개발자가 프로젝트 소스코드를 로컬에서 마련하는 지역 저장소
    • Staging Area에 추가된 파일 commit되면 저장되는 공간
    • git init을 통해 생성된 파일로 파일의 변경 이록을 기록/백업하는 공간
  • Remote Repository (원격 저장소)
    • GitHub와 같은 원격 서버에 저장된 저장소
    • 다른 사용자와 작업 내용을 공유할 수 있는 공간

 

작업 흐름 개요

  1. Working Tree에서 파일을 수정
  2. Staging Area에 git add 명령어로 파일을 추가
  3. Local Repo에 git commit으로 커밋
  4. 필요 시 Remote Repo에 git push로 원격 저장소에 업로드
 

 

 

2. 주요 상태 및 용어

 


주요 상태:

  • Modified (수정됨)
    : 파일이 변경되었으나 아직 Staging Area에 추가되지 않은 상태.
  • Staged (스테이징됨)
    : 변경된 파일이 Staging Area에 추가되어 다음 커밋에 포함될 준비가 된 상태.
  • Committed (커밋됨)
    : Staging Area에 있는 파일들이 커밋되어 로컬 저장소에 영구적으로 저장된 상태.

 


용어 (명령어)

  • add
    • Working Directory에서 변경된 사항을 Staging Area에 올리는 작업
  • commit
    • Staging Area에 임시 저장된 작업을 Local Repo로 저장하는 작업
    • 저장된 프로젝트의 시점 중 특정 시점에 저장된 상태를 부르기도 함 (=리비전)
  • push
    • Local Repo에만 있던 파일을 Remote Repo로 올리는 작업
  • fetch
    • Remote Repo로부터 필요한 파일을 Local Repo로 내려받는 작업
    • 변경 사항을 확인하기 위해 돌아가는 과정
  • merge
    • Remote Repo로 부터 넘겨 받은 Local Repo에 있는 변경사항을
      Working Directory에 직접 합치면서 반영하는 작업
    • Remote Repi에서 받은 것과 Working Directory 같에 conflict(충돌) 발생 위험
  • pull
    • fetch와 merge를 한번에 처리할때 사용
    • Remote Repo로부터 필요한 파일을 Working Directory로 직접 내려받는 작업
    • merge를 포함하고 있으므로 마찬가지로 conflict(충돌)발생 위험
더보기

커밋과 스냅샷

  • 스냅샷
    : 특정 순간의 파일 상태를 기록한 것으로,
    Git은 전체 파일을 복사하지 않고 변경된 부분(델타)만 저장합니다.
  • 커밋의 중요성
    : 커밋은 프로젝트의 변경 이력을 추적하고 특정 시점으로 되돌리는 데 중요한 역할을 합니다.

의미 있는 커밋 분리 전략

  • 커밋은 작업 단위별로 분리하여 관리하는 것이 좋습니다.
    예시:
    1. 기능 추가: 새로운 기능 구현 시 관련 파일들을 하나의 커밋으로 분리.
    2. 버그 수정: 특정 버그와 관련된 코드 변경 사항을 하나의 커밋으로 저장.
    3. 리팩토링: 코드 효율성을 개선하는 작업은 별도의 커밋으로 기록.
    4. 인터페이스 변경: 데이터베이스 연결 인터페이스 수정 등도 하나의 커밋으로 관리.
    5. 기타 변경 사항: 코드 스타일 수정, 주석 추가, 문서 업데이트 등도 별도로 커밋.

 

 

 

 

3. 주요 Git 명령어 소개

 

기본 명령어

 

1) git init 

# 저장소 초기화
# 현재 디렉토리를 Git 저장소로 초기화합니다. .git 디렉토리가 생성됩니다.
git init

 

 

2) git add

# 파일 추가
# 수정된 파일을 Staging Area로 이동시킵니다.
git add <파일명>

# 변경한 파일을 전부 인덱스에 등록(변경한 기존 파일만 등록)
git add -u 

# 모든 파일을 인덱스에 등록(새로 작성한 파일까지 등록)
git add -A
git add .

 

 

3) git commit

# commit 생성
# Staging Area에 있는 파일을 로컬 repository에 저장합니다.
git commit -m "커밋 메시지"

# 커밋 메시지 포함 commit 생성
git commit —message=”메시지”

# 수정된 모든 파일들을 자동으로 staging & commit ($ git add 명령어 생략)
# 새로 생성된 파일은 포함되지 않음
git commit -a -m "커밋 메시지"
git commit -all -m "커밋 메시지"

# 최신 커밋 수정, 이전 커밋에 새로운 변경사항 추가
# 커밋 메시지 변경 가능
git commit -amend -m "커밋 메시지"

 

 

4) git status

# 상태 확인
# 파일의 현재 상태를 확인합니다(예: 수정됨, Staging 됨).
git status

 

 

5) git log

# 변경 이력 확인
# 저장소의 변경 이력을 확인합니다.
git log

# 브랜치의 연결을 가시적으로 표시한 변경 이력
git log --graph

# 간략한 커밋 이력 확인
git log --oneline

# 변경 이력과 함께 차이점 표시(끌 때는 q)
git log -p

# 특정 파일의 변경 이력 확인
git log -- <파일명>
더보기

commit 해시 값 → 고유 식별 번호

 

 

 

4. 실습: To-Do List 프로젝트 시작하기

 

1)  Git 저장소 초기화

  • 프로젝트 폴더를 생성하고 이동한 후, Git 저장소를 초기화합니다:
mkdir todo-list-webapp			# 폴더 생성
ls -l					# 폴더 생성 확인 (l옵션 : 상세정보 출력)
cd todo-list-webapp			# 생성한 폴더로 위치 이동
git init				# git 저장소 초기화

2)  파일 생성 및 추가

  • 새로운 HTML 파일을 생성하고 Staging Area로 추가합니다:
ls -al						# git 초기화 확인 (a옵션 : 숨김폴더(.git) 모두 출력)
echo "<h1>To-Do List</h1>" > index.html		# html 파일 생성 및 내용 작성
ls -l						# 생성 파일 확인
git add index.html				# staged area에 생성한 파일 add

3) 커밋 생성

  • 파일을 커밋하고 변경 이력을 확인합니다:
git commit -m "feat: 프로젝트 초기 설정"	# git repository로 commit
git log					# git 로그 기록 확인
 

 

 

 

 

5. 유용한 Git 명령어

 

주요 명령어

1) git diff

# 변경 사항 비교
# 변경된 파일의 내용을 비교합니다.
git diff

# staging 영역과의 비교
git diff --staged

# 이전 커밋과의 차이 확인
git diff <커밋아이디>

 

 

2) git restore

# 파일 복원
# 변경된 파일을 최근 커밋된 상태로 복원합니다.
git restore <파일명>

 


3) git reset

# 최근 커밋 롤백(취소)
git reset --soft HEAD~1

# 특정 커밋 시점으로 되돌리기
git reset --hard <커밋해시>

 


4) git show

# Git에서 특정 버전의 특정 파일 내용 확인하기
# [버전] → 확인하려는 특정 버전을 나타내는 커밋 해시, 브랜치 이름(최신버전), 태그 등을 사용
# [파일경로] → 해당 파일의 상대 또는 절대 경로 지정
git show [버전]:[파일경로]

# 커밋 작성자, 작성 날짜,
# diff → 커밋에서의 수정 작업 표시
git show [커밋 해시]

# 해당 커밋에서의 파일 상태 출력
git show [커밋 해시]:[파일경로]

# 해당 브랜치의 commit 이력 출력
git show [브랜치명]

 

 

실습: 변경 사항 비교와 복원

더보기

1. 파일 수정 및 변경 사항 비교

  • 파일 내용을 수정하고 변경 사항을 확인합니다.
# 파일 수정
echo "console.log('Task Completed Functionality');" >> app.js

# 변경사항 확인
git diff
	# Staging Area와의 변경사항 확인
	git diff --staged
 

2. 파일 복원

  • 파일을 원래 상태로 복원합니다.
# 이전 상태로 복원
git restore app.js

# 복원 결과 확인
cat app.js
 
 

3. 커밋 이력 탐색 및 롤백

  • 커밋 이력을 탐색하고 특정 커밋으로 롤백합니다.
# 커밋 로그 확인
git log

# 최근 커밋 롤백
git reset --soft HEAD~1

# 특정 커밋으로 되돌리기
git reset --hard <커밋아이디>

 

 

 

 

 

마무리
github 관련 내용은 github 연동 이후에 작성될 예정입니다.