Git은 개발자들에게 필수적인 분산 버전 관리 시스템이다. 소스 코드의 변경 이력을 추적하고, 여러 개발자가 효율적으로 협업할 수 있게 해 준다. 이 포스트에서는 Git의 기본 개념부터 주요 명령어, 그리고 각 명령어의 실제 사용 사례와 유용한 옵션들을 상세히 알아보겠다.
Git의 기본 구조 이해하기
Git은 크게 4가지 영역으로 구성된다:
- Working Directory (작업 디렉터리): 실제 파일들이 존재하는 곳이다. 여기서 코드를 작성하고 수정한다.
- Staging Area (스테이징 영역): 커밋할 준비가 된 변경 사항들이 대기하는 곳이다.
- Local Repository (로컬 저장소): 커밋된 버전들이 저장되는 곳이다.
- Remote Repository (원격 저장소): 팀원들과 공유하는 서버의 저장소다.
이 구조를 이해하면 Git 명령어들의 동작 방식을 더 쉽게 이해할 수 있다.
주요 Git 명령어 가이드
1. Git 초기화: git init
|
|
사용 이유: 새 프로젝트를 시작할 때 사용한다. 이 명령어는 현재 디렉토리를 Git 저장소로 초기화한다.
동작 방식: .git
이라는 숨겨진 디렉토리를 생성하여 Git이 버전 관리에 필요한 모든 정보를 저장한다.
2. 파일 상태 확인: git status
|
|
사용 이유: 작업 디렉토리와 스테이징 영역의 상태를 확인할 때 사용한다. 어떤 파일이 변경되었고, 어떤 파일이 커밋될 준비가 되었는지 알 수 있다.
주요 옵션:
-s
또는--short
: 간단한 형식으로 상태를 출력한다.-b
또는--branch
: 현재 브랜치 정보도 함께 보여준다.
3. 파일 스테이징: git add
|
|
사용 이유: 변경된 파일을 다음 커밋에 포함하기 위해 스테이징 영역에 추가한다.
주요 옵션:
.
: 현재 디렉토리의 모든 변경 사항을 스테이징한다.-p
: 각 변경 사항을 개별적으로 확인하고 스테이징할 수 있다.-u
: 이미 추적 중인 파일들만 스테이징한다.
사용 예:
|
|
이 명령을 사용하면 각 변경 사항을 하나씩 검토하고 스테이징할 수 있어, 더 정확한 커밋을 만들 수 있다.
4. 스테이징 취소: git restore
|
|
사용 이유: 스테이징 영역에 추가한 파일을 다시 워킹 디렉터리로 되돌릴 때 사용한다.
주요 옵션:
--staged
: 스테이징된 변경 사항을 취소한다.- 옵션 없이 사용: 워킹 디렉터리의 수정 사항을 취소한다.
사용 예:
|
|
이 명령은 모든 스테이징된 변경 사항을 취소한다.
참고: Git 2.23.0 버전 이전에는 git reset
명령어를 사용했다.
|
|
5. 변경 사항 커밋: git commit
|
|
사용 이유: 스테이징된 변경 사항들을 저장소의 새로운 버전으로 기록한다.
주요 옵션:
-m
: 커밋 메시지를 인라인으로 작성한다.-a
: 추적 중인 모든 파일의 변경 사항을 자동으로 스테이징하고 커밋한다.--amend
: 마지막 커밋을 수정한다.
사용 예:
|
|
이 명령은 추적 중인 모든 파일의 변경 사항을 스테이징하고 커밋까지 한 번에 수행한다.
옵션 -m
을 사용하지 않으면 Git은 기본 텍스트 편집기를 열어 커밋 메시지를 입력할 수 있게 한다. 커밋 메시지는 변경 사항을 나타내는 간결한 설명이어야 한다.
6. 커밋 취소: git reset
및 git revert
커밋 취소하기:
|
|
사용 이유: 마지막 커밋을 취소하고 해당 변경 사항을 워킹 디렉터리로 되돌릴 때 사용한다.
주요 옵션:
--soft
: 커밋을 취소하고 변경 사항을 스테이징 영역에 유지한다.--mixed
: (기본값) 커밋을 취소하고 변경 사항을 워킹 디렉터리로 되돌린다.--hard
: 커밋을 취소하고 변경 사항을 완전히 삭제한다. 주의해서 사용해야 한다.
사용 예:
|
|
이 명령은 최근 3개의 커밋을 취소하고, 해당 변경 사항을 스테이징 영역에 유지한다.
원격 저장소에 푸시된 커밋 취소하기:
|
|
사용 이유: 이미 원격 저장소에 푸시된 커밋을 안전하게 취소할 때 사용한다. 새로운 커밋을 생성하여 이전 변경 사항을 되돌린다.
사용 예:
|
|
이 명령은 ‘abc123’ 해시의 커밋을 취소하는 새로운 커밋을 생성한다.
7. 커밋 히스토리 확인: git log
|
|
사용 이유: 프로젝트의 커밋 히스토리를 확인할 때 사용한다. 누가, 언제, 무엇을 변경했는지 볼 수 있다.
주요 옵션:
--oneline
: 각 커밋을 한 줄로 간략하게 보여준다.--graph
: 브랜치와 머지 히스토리를 그래프로 표시한다.--stat
: 각 커밋에서 변경된 파일의 통계를 보여준다.
사용 예:
|
|
이 명령은 모든 브랜치의 커밋 히스토리를 그래프 형태로 간략하게 보여준다.
8. 원격 저장소 관리: git remote
|
|
사용 이유: 로컬 저장소와 원격 저장소를 연결할 때 사용한다.
주요 명령:
add
: 새 원격 저장소를 추가한다.remove
: 원격 저장소를 제거한다.set-url
: 기존 원격 저장소의 URL을 변경한다.
사용 예:
|
|
이 명령은 ‘origin’이라는 이름의 원격 저장소 URL을 변경한다.
9. 원격 저장소와 동기화: git push
및 git pull
|
|
사용 이유:
push
: 로컬의 커밋을 원격 저장소에 업로드한다.pull
: 원격 저장소의 변경 사항을 로컬로 가져와 병합한다.
주요 옵션:
--force
: (push 시) 원격 브랜치를 강제로 덮어쓴다. 주의해서 사용해야 한다.--rebase
: (pull 시) 병합 대신 리베이스를 수행한다.
사용 예:
|
|
이 명령은 원격의 변경 사항을 가져오면서 로컬의 커밋을 재배치한다.
10. 브랜치 관리: git branch
및 git checkout
|
|
사용 이유:
branch
: 새 브랜치를 생성하거나 기존 브랜치를 관리한다.checkout
: 다른 브랜치로 전환한다.
주요 옵션:
-b
: (checkout 시) 새 브랜치를 생성하고 바로 전환한다.-d
: (branch 시) 브랜치를 삭제한다.
사용 예:
|
|
이 명령은 ‘A’라는 새 브랜치를 생성하고 바로 그 브랜치로 전환한다.
11. 브랜치 병합: git merge
|
|
사용 이유: 한 브랜치의 변경 사항을 다른 브랜치에 통합할 때 사용한다.
주요 옵션:
--no-ff
: 항상 새로운 커밋을 생성하여 병합한다.--squash
: 브랜치의 모든 커밋을 하나의 커밋으로 압축하여 병합한다.
사용 예:
|
|
이 명령은 ‘A’ 브랜치의 모든 변경 사항을 하나의 커밋으로 압축하여 현재 브랜치에 병합한다.
결론
Git은 강력하고 유연한 버전 관리 도구다. 이 포스트에서 다룬 기본적인 명령어들을 마스터하면, 개인 프로젝트나 팀 프로젝트에서 효율적으로 코드를 관리할 수 있다. 더 나아가 Git의 고급 기능들을 학습하면, 복잡한 개발 프로젝트에서도 능숙하게 대처할 수 있을 것이다.