커밋 전에 할 일은 파일을 모두 담는 것이 아니라, 이번 변경에 필요한 내용만 고르는 것입니다. status로 대상을 보고 diff로 내용을 확인한 뒤 add와 commit을 사용하면 돼요. 이 순서를 작은 예제로 익혀 보겠습니다.
Git 설치와 작성자 설정을 마친 상태에서 시작합니다. 아래 셸 명령은 Linux Bash 또는 Windows Git Bash에서 실행합니다. Python 실행 파일은 Linux에서는 python3, Windows에서는 설치 상태에 따라 py -3로 바꿉니다. 파일 기록 자체에는 Python이 없어도 됩니다.
Git·GitOps 전체 연재 · 05 / 24
이 글의 목차
1. 프로젝트 경계 안에 저장소를 만든다
cd ~/git-lab
mkdir gitops-demo
cd gitops-demo
git init -b main
printf '# GitOps Demo\n' > README.md
cat > greeting.py <<'EOF'
def greet(name):
cleaned = name.strip()
if not cleaned:
raise ValueError("name must not be empty")
return f"Hello, {cleaned}!"
if __name__ == "__main__":
print(greet("Git"))
EOF
git status --short
??는 아직 추적하지 않는 파일을 뜻합니다. 홈 디렉터리 전체나 여러 프로젝트를 한 번에 git init하지 않습니다. 지금 만드는 gitops-demo가 변경 이력과 공유 권한을 나누는 단위입니다.
2. 다음 커밋에 들어갈 파일을 고른다
git add README.md greeting.py
git diff --staged
git status --short
git commit -m "Add greeting example and README"
git log -1 --oneline
git add는 파일 이름만 예약하는 명령이 아닙니다. 실행 시점의 내용을 인덱스에 담습니다. 첫 커밋에서는 git diff에 아무것도 보이지 않아도 git diff --staged에는 새 파일 내용이 나타날 수 있습니다.
커밋 메시지는 무엇을 바꾸었는지 설명합니다. 복잡한 수정이라면 왜 바꾸었는지 본문에 덧붙일 수 있어요. 한 커밋에 문서 오탈자와 배포 권한 변경을 섞지 않으면 검토와 되돌리기가 쉬워집니다.
3. add 뒤에 다시 편집하면 무엇이 달라질까
README에 설명을 추가하고 스테이징한 다음, 한 줄을 더 추가합니다. 이 예제는 같은 파일이 두 공간에서 다른 상태가 될 수 있음을 보여줍니다.
printf '\nSmall Git learning project.\n' >> README.md
git add README.md
printf 'More examples will follow.\n' >> README.md
git status --short
git diff -- README.md
git diff --staged -- README.md
상태의 두 칸은 각각 인덱스와 작업 트리의 변화를 나타냅니다. 위 예제에서는 같은 파일에 MM이 보일 수 있어요. 앞의 수정은 스테이징했고 뒤의 수정은 아직 담지 않은 상태입니다.
| 명령 | 비교하는 대상 | 쓰는 시점 |
|---|---|---|
git diff | 인덱스와 작업 트리 | 아직 담지 않은 변경 확인 |
git diff --staged | HEAD와 인덱스 | 이번 커밋 내용 확인 |
git diff HEAD | HEAD와 작업 트리 | 추적 파일의 전체 변경 확인 |
두 줄 모두 이번 커밋에 넣기로 했다면 다시 git add README.md를 실행합니다. 일부 변경만 골라야 할 때는 git add -p로 변경 덩어리를 검토할 수 있습니다. 처음에는 파일 단위로 나누는 습관부터 익히세요.
git add README.md
git diff --check
git diff --staged --check
git commit -m "Explain the learning project"
git status
diff --check는 공백 오류나 충돌 표시 같은 문제를 찾는 데 도움이 됩니다. 프로그램이 올바르게 동작하는지 검사하는 테스트를 대신하지는 않습니다. Python이 설치되어 있다면 python3 greeting.py 또는 Windows의 py -3 greeting.py로 예제를 실행할 수 있습니다.
커밋과 푸시 사이에는 서버가 있다
지금 만든 두 커밋은 로컬에만 있습니다. commit은 다른 사람에게 파일을 전송하지 않습니다. 10편의 원격 저장소를 연결하고 push해야 서버에서 같은 이력을 볼 수 있어요.
연재 안내의 예제 파일 묶음에는 이후 CI에서 사용할 테스트도 들어 있습니다. 기존 .git을 덮어쓰지 말고 필요한 파일만 복사합니다. 명령의 비교 기준은 git diff, 파일 상태는 git status에서 자세히 확인할 수 있습니다.
이전 글 · [Git·GitOps 04] Ubuntu 24.04에 Git 설치하고 저장소 준비하기 · 다음 글 · [Git·GitOps 06] 이력 읽는 법: 커밋 그래프·HEAD·diff·bisect · 연재 목록과 예제 파일

![[Git·GitOps 24] Git·CI/CD·GitOps 운영 흐름 완성하기: 장애별 판단과 복구](https://blog.maruops.com/wp-content/uploads/2026/10/maruops-git-photo-12-768x510.webp)
![[Git·GitOps 23] 비밀 값 관리: Secret의 base64와 SOPS·age 암호화](https://blog.maruops.com/wp-content/uploads/2026/10/maruops-git-photo-2-768x512.webp)
![[Git·GitOps 22] 변경 감지와 복구: 자동 Sync·selfHeal·prune·Git revert](https://blog.maruops.com/wp-content/uploads/2026/10/maruops-git-photo-10-768x576.webp)
답글 남기기