📍 Git의 공간 개념 및 주요 명령어
- Local (작업 공간 - ex. 내 컴퓨터)
- Working Directory: 코드를 작성하고 수정하는 공간
- Staging Area: Local Repository에 저장할 사항만 올려두는 공간
- Repository: 저장 공간
- Branch: Local Repository 내부에서 작업을 분리하여 독립적으로 진행하기 위한 공간, Branch 간 전환 가능
- Remote (협업/공유/백업을 위한 공간 - ex.GitHub, GitLab, Bitbucket 등)
- Repository: 저장 공간, origin(별칭)
- Branch: Remote Repository 내부에서 작업을 분리하여 독립적으로 진행하기 위한 공간, Branch 간 전환 가능
이미지 출처
👉 주요 명령어의 코드 이동
- add: Working Directory -> Staging Area
- commit: Staging Area -> Local Repository
- push: Local Repository -> Remote Repository (변경 사항)
- pull: Remote Repository -> Local Repository (변경 사항)
👉 Git의 파일 상태

📍 명령어
-
설치 및 설정
- init: 새로운 Git Repository(Local, Remote)를 초기화한다.
- clone: Remote Repository의 내용을 Local(개인 컴퓨터)에 복제하여 가져온다.
-
Branch 및 병합
- checkout: Working Directory를 특정 Local Branch로 전환하거나, 특정 파일을 특정 commit으로 복원한다.
- merge: 여러 개의 Branch에서의 변경 사항을 하나로 합친다. merge 당하는 Branch에서 merge를 수행해야 한다.
- stash: Working Directory의 수정 사항을 저장하고 현재 활성화된 Local Branch의 가장 최근 commit(HEAD commit)으로 Working Directory 복구한다. stash는 각 Local Branch 별로 독립적으로 관리된다.
👉 참고하면 좋은 사이트
📍 헷갈릴 수 있는 것
.git
폴더는 Git이 버전 관리 및 변경 이력을 관리하는 데 필요한 정보를 담고 있다. git init
, git clone
시 생성된다.
- Git 초기화(init) 시, Local Repository에 자동으로 master/main branch가 생성된다.
.gitignore
파일은 Repository 전체에 영향을 미치는 설정 파일이다.
- 이미 commit된 파일은 추후
.gitignore
파일에 추가되더라도 그 이후의 변경 사항이 계속 추적된다.
- add, commit은 Local에서의 과정이다.
- push는 Local Repository 내부의 어떤 경로에서 실행하든 동일한 결과를 가져온다.
- 로컬의 파일은 최근 변경된 branch로 열린다. 만약 파일이 main branch에서 최근에 변경되었다면, 해당 파일은 main branch의 최신 버전으로 열린다.
📍 일반적으로 따르면 좋은 것
- Local Repository의 master/main branch에는 commit하지 않는다. develop branch에서 작업 후 commit하고, master/main branch에는 안정적인 코드만 merge한다.
- workspace 폴더에는
.metadata
폴더와 Remote Repository에 올릴 필요가 없는 파일들이 있기 때문에 Working Directory로 설정하지 않는 것이 좋다.
.metadata
폴더, *.class
파일은 항상 .gitignore
폴더에 포함한다.
- commit을 되돌리기는 하지 않는 것이 좋다. 대신 코드 수정 후 다시 add, commit을 한다.
- Remote Repository에 push할 때 순서
- 최선책: pull -> 코드 수정 -> commit -> push
- 차선책1: 코드 수정 -> stash -> pull -> stash 적용 -> commit -> push
- 차선책2(충돌 발생 여지 있음): 코드 수정 -> commit -> pull -> push
- 실무에서는 Dev계(개발 목적), Stage계(테스트 목적), Real계(실제 운영 목적)를 사용한다. Dev계는 Dev DB를, Stage계와 Real계는 Real DB를 사용한다.
References
🔗 https://www.explainthis.io/en/swe/git-flow
🔗 https://git-scm.com/docs