[TOOL-004][기초] Git 저장소와 첫 커밋으로 변경 이력 남기기 > IT 기술 공유

본문 바로가기

사이트 내 전체검색

뒤로가기 IT 기술 공유

[TOOL-004][기초] Git 저장소와 첫 커밋으로 변경 이력 남기기

페이지 정보

작성자 기술팀장 작성일 26-08-31 02:33 조회 266 댓글 0

본문

[이번 수업]
Git은 파일이 어떻게 바뀌었는지 스냅샷으로 기록하는 버전 관리 도구입니다. 새 폴더를 저장소로 만들고 README 한 파일을 스테이징한 뒤 첫 커밋을 남겨 봅니다.

[선수지식]
TOOL-001의 코드 편집기, TOOL-002의 터미널과 현재 경로, TOOL-003의 도구 설치 개념을 알면 좋습니다. 터미널에서 `git --version`이 실행되어야 합니다.

[학습목표]
1. 일반 폴더를 Git 저장소로 초기화한다.
2. 작업 트리와 스테이징 영역, 커밋의 역할을 구분한다.
3. status로 상태를 확인하고 add·commit·log 흐름을 실행한다.
4. 비밀정보가 이력에 들어가지 않도록 커밋 전에 점검한다.

[핵심개념]
저장소(repository)는 프로젝트의 Git 이력을 보관하는 공간입니다. `git init`은 현재 폴더에 `.git` 디렉터리를 만들며, 실제 이력과 설정은 여기에 저장됩니다.

작업 트리(working tree)는 지금 편집하는 파일들입니다. 파일을 고쳤다고 바로 이력에 기록되지는 않습니다. 스테이징 영역(staging area, index)은 다음 커밋에 포함할 내용을 고르는 중간 칸입니다. `git add README.md`는 그 시점의 README 내용을 스테이징합니다. 이후 파일을 다시 고치면 스테이징된 내용과 작업 트리 내용이 달라질 수 있습니다.

커밋은 스테이징 영역의 스냅샷을 저장소 이력에 기록한 것입니다. 작성자, 시각, 메시지, 부모 커밋 정보와 식별용 해시를 가집니다. 커밋 메시지는 무엇이 바뀌었는지보다 왜 바꿨는지가 드러나게 짧고 구체적으로 씁니다. 커밋은 먼저 로컬 저장소에 생기며 원격 전송은 별도의 push 작업입니다.

`git status`는 작업 트리와 스테이징 상태를 보여 줍니다. 짧은 형식에서 `??`는 아직 추적하지 않는 파일, `A`는 새 파일이 스테이징됐다는 뜻입니다. `git log --oneline`은 해시 앞부분과 제목으로 이력을 간단히 보여 줍니다.

[따라하기]
빈 연습 폴더에서 다음 순서로 실행합니다. 이미 같은 이름의 폴더가 있으면 다른 이름을 사용하세요.

```text
mkdir git-practice
cd git-practice
git init -b main
git config user.name "Practice User"
git config user.email "practice@example.invalid"
```

README 파일은 Windows PowerShell에서 `Set-Content README.md "# Git practice"`, macOS·Linux에서 `printf '# Git practice\n' > README.md`로 만듭니다. 이어서 실행합니다.

```text
git status --short
git add README.md
git status --short
git commit -m "docs: add README"
git log --oneline -1
git status --short
```

처음 status에는 `?? README.md`, add 뒤에는 `A  README.md`가 표시됩니다. 커밋은 `1 file changed`와 커밋 제목을 출력하고, log에는 환경마다 다른 해시와 `docs: add README`가 보입니다. 마지막 status가 아무것도 출력하지 않으면 기록되지 않은 변경이 없다는 뜻입니다. `git init -b main`을 지원하지 않는 오래된 Git이라면 `git init`을 사용해도 되며 초기 브랜치 이름은 다를 수 있습니다.

[흔한 실수]
- 파일을 저장만 하고 커밋됐다고 생각합니다. status로 단계마다 확인하세요.
- add 뒤 파일을 다시 고치고 전부 포함됐다고 생각합니다. 다시 status와 diff를 봅니다.
- `git add .`로 불필요한 파일까지 한꺼번에 올립니다. 처음에는 파일명을 지정하세요.
- 커밋과 원격 push를 같은 작업으로 생각합니다. 커밋은 로컬에서도 가능합니다.

[보안 주의]
`.env`, API 키, 비밀번호, 개인키를 커밋하지 마세요. 커밋 전 `git status`, `git diff`, `git diff --cached`로 대상과 내용을 확인합니다. `.gitignore`는 이미 커밋된 비밀을 과거 이력에서 지우지 못합니다. 비밀이 들어갔다면 공개 전이라도 해당 자격증명을 즉시 폐기·교체하고 담당자 절차를 따르세요. 중요한 저장소에서 `git reset --hard` 같은 변경 손실 명령을 연습하지 말고, 이번 실습은 새 로컬 폴더와 가짜 이메일만 사용합니다.

[직접 해볼 과제]
1. README에 한 줄을 추가하고 status와 `git diff`로 변경을 확인하세요.
2. 변경을 add한 뒤 `git diff --cached`로 커밋될 내용을 확인하세요.
3. `docs: explain practice`라는 두 번째 커밋을 만들고 `git log --oneline -2`로 순서를 확인하세요.

[확인문제]
1. 작업 트리와 스테이징 영역은 어떻게 다른가요?
2. git add 뒤 파일을 다시 수정하면 왜 두 상태가 생길 수 있나요?
3. .gitignore만 추가해도 이미 커밋된 비밀이 사라지지 않는 이유는 무엇인가요?

[다음 학습]
번호 우선 순환에 따라 다음 글은 PY-004 함수·모듈·패키지입니다. TOOL 다음 수업은 TOOL-005 브랜치·병합·충돌 해결입니다.

[공식 참고 자료]
- Git 공식 튜토리얼: https://git-scm.com/docs/gittutorial
- git init: https://git-scm.com/docs/git-init
- git status: https://git-scm.com/docs/git-status
- git add: https://git-scm.com/docs/git-add
- git commit: https://git-scm.com/docs/git-commit
- git log: https://git-scm.com/docs/git-log

댓글목록 0

등록된 댓글이 없습니다.

Copyright © 소유하신 도메인. All rights reserved.

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

PC 버전으로 보기