명령을 칠 때마다 파일이 어느 칸으로 가는지 보며 Git을 익혀요. 내 컴퓨터에 저장소를 만들고, GitHub에 올리고, 팀원과 주고받고, 실수를 되돌리는 데까지 이어서 해요.
| 슬라이드 | 분량 | 이전 모듈 | 다음 모듈 |
|---|---|---|---|
| 브라우저로 열기 | 43장 · 6개 파트 | 01 · 터미널 기초 | 03 · Git 브랜치와 협업 |
이 모듈을 마치면 다음을 할 수 있어요.
git status로 파일 상태를 읽고 add, commit으로 기록을 남겨요.push origin main, pull origin main, clone으로 주고받아요.reset, revert, reflog로 커밋을 되돌려요.| 파트 | 쪽 | 내용 |
|---|---|---|
| 1. 개념 잡기 | 3–8 | 네 칸, 파일 상태 |
| 2. 혼자 기록하기 | 9–18 | config init add commit, 커밋 메시지 규칙 |
| 3. GitHub과 연결 | 19–23 | 빈 저장소 만들기, remote add, push |
| 4. 함께 작업하기 | 24–28 | clone fetch pull |
| 5. 되돌리기 | 29–35 | reset reflog revert |
| 6. 문제 해결 | 36–42 | git status 읽기, 자주 나는 에러 |
| 요약 | 43 | 한 장 요약 |
Git의 모든 명령은 파일을 아래 네 칸 사이로 옮기는 일이에요.
| 칸 | 이름 | 실제 위치 |
|---|---|---|
| ① | 작업 폴더 (Working Directory) | 내가 파일을 고치는 폴더 |
| ② | 대기실 (Staging Area) | .git/index |
| ③ | 내 저장소 (Local Repository) | .git 폴더 |
| ④ | 원격 저장소 (Remote) | GitHub |
① 작업 폴더 --add--> ② 대기실 --commit--> ③ 내 저장소 --push origin main--> ④ GitHub
① 작업 폴더 <------------------ pull origin main ------------------------- ④ GitHub
| 상태 | 뜻 | git status에서 보이는 모습 |
|---|---|---|
| Untracked | Git이 처음 보는 새 파일 | Untracked files: 아래 빨간 글씨 |
| Staged | add 해서 대기실에 올린 파일 | Changes to be committed: 아래 초록 글씨 |
| Committed | 마지막 커밋과 똑같은 파일 | nothing to commit, working tree clean |
| Modified | 커밋한 뒤에 고친 파일 | Changes not staged for commit: 아래 빨간 글씨 |
타입: 무엇을 했는지 형식으로 써요.
| 타입 | 쓰는 때 |
|---|---|
feat |
새 기능 |
fix |
버그 수정 |
docs |
README 같은 문서 |
style |
동작은 그대로, 모양만 정리 |
refactor |
동작은 그대로, 구조 개선 |
test |
테스트 코드 |
chore |
설정, 패키지 |
이름, 이메일, 주소의 kim은 내 것으로 바꿔서 쳐요.
git config --global user.name "홍길동"
git config --global user.email "gildong@example.com"
git config --global init.defaultBranch main
mkdir hello-git && cd hello-git
git init
echo "hello" > hello.md
git status # Untracked
git add hello.md
git status # Staged
git commit -m "feat: 인사 파일 추가"
GitHub에서 hello-git이라는 빈 저장소를 먼저 만들어요. README 추가는 체크하지 않아요.
git remote add origin https://github.com/kim/hello-git.git
git remote -v
git push origin main
git clone https://github.com/kim/hello-git.git # 처음 받을 때
cd hello-git
git fetch origin # 받아만 오기
git log --oneline origin/main # GitHub 쪽 기록 보기
git pull origin main # 받아서 합치기
GitHub과 비교할 땐 git fetch origin 뒤에 기록을 봐요.
git log --oneline에서 main이 origin/main보다 위에 있으면 git push origin maingit log --oneline origin/main에서 origin/main이 main보다 위에 있으면 git pull origin main이 과정은 git push -u를 쓰지 않아요. 그래서 git status는 GitHub보다 앞섰는지 뒤처졌는지 알려 주지 않아요.
push 했는지부터 확인해요.
| 상황 | 명령 | 결과 |
|---|---|---|
| push 전 | git reset HEAD~1 |
커밋만 취소하고 고친 내용은 작업 폴더에 남아요 |
| push 후 | git revert 커밋해시 |
반대로 고친 커밋을 하나 더 쌓아요. 팀원 기록은 그대로예요 |
| reset을 잘못했을 때 | git reflog |
지운 커밋의 해시를 찾아 git reset --hard 해시로 돌아가요 |
주의
git reset --hard는 작업 폴더에서 고친 내용까지 지워요. 쓰기 전에git status로 남은 변경이 없는지 확인해요.
| 명령 | 하는 일 |
|---|---|
git init |
지금 폴더를 저장소로 만들기 |
git status |
파일 상태 보기 |
git add 파일 |
대기실에 올리기 |
git commit -m "타입: 내용" |
기록 남기기 |
git log --oneline |
기록 보기 |
git remote add origin 주소 |
GitHub 저장소 연결 |
git push origin main |
GitHub에 올리기 |
git clone 주소 |
GitHub 저장소 처음 받기 |
git fetch origin |
받아만 오기 |
git pull origin main |
받아서 합치기 |
git reset HEAD~1 |
push 전 커밋 취소 |
git revert 해시 |
push 후 커밋 되돌리기 |
| 메시지 | 원인과 해결 |
|---|---|
index.lock': File exists |
다른 git 작업이 끝났는지 확인한 뒤 .git/index.lock 파일 하나만 지우고 다시 실행 |
nothing added to commit |
대기실이 비어 있어요. git add 먼저 |
remote origin already exists |
이미 등록돼 있어요. git remote -v로 확인하고 바꿀 땐 git remote set-url origin 새주소 |
'origin' does not appear to be a git repository |
아직 등록하지 않았어요. git remote add origin 주소 |
has no upstream branch |
git push만 쳤어요. git push origin main처럼 끝까지 적어요 |
! [rejected] ... (fetch first) |
GitHub에 내가 모르는 커밋이 있어요. git pull origin main 뒤에 다시 push. --force는 쓰지 않아요 |