Git Workflow

artp·2024년 12월 27일

git&github

목록 보기
3/18
post-thumbnail

Git 워크플로

Git의 기본 워크플로는 작업 디렉토리(Working Directory), 스테이징 영역(Staging Area), 로컬 저장소(Local Repository), 그리고 원격 저장소(Remote Repository)로 구성됩니다. 이 단계들은 Git이 파일 변경 내역을 스냅샷으로 관리하고 협업을 가능하게 만드는 핵심 과정입니다.

Git의 스냅샷이란?

Git은 변경된 파일의 전체 복사본을 저장하는 대신, 각 변경 시점의 상태를 스냅샷(Snapshot) 형태로 기록합니다.

  • 스냅샷은 특정 시점의 파일 상태를 저장한 것으로, 파일이 변경되지 않았다면 이전 커밋의 데이터를 재사용하여 효율적으로 관리합니다.
  • 이를 통해 프로젝트의 특정 시점으로 쉽게 돌아갈 수 있으며, 변경 이력을 빠르게 추적할 수 있습니다.

1. Working Directory(작업 디렉토리)

작업 디렉토리는 사용자가 실제로 파일을 작업하는 공간입니다. 프로젝트의 소스 파일이 저장되어 있고, 변경 작업이 이뤄집니다.

상태:

  • Untracked: Git이 아직 추적하지 않는 새 파일
  • Modified: 변경된 파일. Git이 추적하고 있지만 아직 Staging Area에 반영되지 않은 상태

주요 명령어:

git status	 	# 현재 파일 상태 확인
git diff		# 변경된 파일 비교
git add <파일명>  # 변경된 파일을 스테이징 영역으로 이동

2. Staging Area(스테이징 영역)

스테이징 영역은 커밋할 파일을 잠시 보관하는 공간으로, 변경 내역을 정리하고 커밋 준비를 하는 단계입니다.

상태:

  • Staged: 커밋 준비가 완료된 파일

주요 명령어:

git add .		# 현재 디렉터리 내 모든 변경된 파일 추가
git add -A		# 프로젝트 내 모든 변경된 파일 추가
git reset HEAD <파일명> # 특정 파일을 스테이징 영역에서 제거

3. Local Repository(로컬 저장소)

로컬 저장소는 작업 내역(커밋)을 기록하고 관리하는 공간으로, 각 커밋은 고유한 ID로 추적됩니다.

상태:

  • Committed: 로컬 저장소에 커밋된 상태

주요 명령어:

git commit -m "커밋 메시지"  # 변경 내용을 로컬 저장소에 기록
git commit --amend		  # 마지막 커밋 수정
git log --oneline		  # 커밋 내역 간략히 확인 

브랜치 관련 명령어:

git branch					# 현재 존재하는 브랜치 목록 확인
git checkout -b new-branch	# 새로운 브랜치 생성 및 이동

4. Remote Repository(원격 저장소)

원격 저장소는 로컬 저장소와 동기화하여 협업할 수 있는 온라인 저장소입니다.
예: GitHub, GitLab, Bitbucket 등.

주요 명령어:

git push origin <branch>	# 로컬 브랜치를 원격 저장소로 전송
git push -u origin <branch> # 기본 업스트림 브랜치 설정 후 푸시
git pull origin <branch>	# 원격 저장소에서 최신 변경 사항 가져오기
git fetch					# 원격 저장소의 변경 사항을 가져오지만 병합은 하지 않음

git push -u origin <branch> 설명

  • git push: 원격 저장소로 변경 사항을 업로드
  • -u 또는 --set-upstream: 현재 로컬 브랜치와 원격 브랜치를 연결(업스트림 설정)
  • origin: 원격 저장소 이름 (기본적으로 origin이 사용됨)
  • <branch>: 현재 로컬에서 작업 중인 브랜치 이름

위 명령어를 실행하면 업로드한 브랜치를 기본 업스트림 브랜치로 설정하게 됩니다. 즉, 이후 git push 또는 git pull 명령어를 실행할 때 origin <branch>자동으로 참조하게 됩니다.

업스트림 브랜치란?
업스트림 브랜치는 로컬 브랜치와 원격 브랜치 간의 연결을 의미합니다.

  • 업스트림 브랜치가 설정되면 git pull 또는 git push 시 자동으로 원격 브랜치를 추적할 수 있습니다.
  • 설정하지 않으면 매번 git push origin <branch>처럼 원격 저장소와 브랜치를 명시해야 합니다.
  • 업스트림 브랜치를 설정하면 이후 git push, git pull 명령만으로 간단하게 푸시 및 풀을 할 수 있습니다.

Merge와 Rebase 차이

  • git merge: 현재 브랜치에 다른 브랜치를 병합 (새로운 커밋이 생성됨)
  • git rebase: 현재 브랜치를 다른 브랜치 위로 옮김 (히스토리를 깔끔하게 유지 가능)

결론

Git은 작업 디렉터리(Workding Directory) → 스테이징 영역(Staging Area) → 로컬 저장소(Local Repository) → 원격 저장소(Remote Repository)로 이어지는 워크플로를 통해 변경 사항을 효율적으로 관리할 수 있습니다.
git push전까지는 모든 변경 사항이 로컬에만 존재하며, 협업을 위해서는 git pushgit pull을 활용해야 합니다. 또, Git의 스냅샷 방식 덕분에 프로젝트의 특정 상태로 쉽게 되돌아갈 수 있으며, 효율적인 버전 관리가 가능합니다.

profile
donggyun_ee

0개의 댓글