✅ Git 개념 정리
1. 커밋(Commit)
- 내 로컬 저장소에 변경사항을 기록하는 것
- 하나의 스냅샷을 저장하는 것과 같음
- 반드시 git add로 스테이지에 올린 후 git commit -m "메시지" 수행
2. 풀(Pull)
- 원격 저장소의 최신 변경사항을 가져오고 내 브랜치에 병합까지 하는 작업
- 내부적으로 git fetch + git merge를 한 번에 수행
- 명령어: git pull origin 브랜치명
3. 푸시(Push)
- 내 로컬 커밋들을 원격 저장소로 업로드하는 것
- 명령어: git push origin 브랜치명
4. 패치(Fetch)
- 원격 저장소의 최신 커밋 정보를 가져오기만 하고 적용하지는 않음
- 로컬 origin/브랜치명에만 반영되고 내 로컬 브랜치는 변하지 않음
- 명령어: git fetch
5. 브랜치(Branch)
- 독립된 작업 공간
- 새로운 기능이나 수정 작업을 다른 브랜치에서 하고 완료 후 병합
- 명령어: git branch 브랜치명 → 생성 / git checkout 브랜치명 → 이동
6. 병합(Merge)
- 다른 브랜치의 작업 내용을 현재 브랜치에 합치는 것
- 명령어: git merge 브랜치명
7. 스태시(Stash)
- 작업 중인 변경사항을 임시로 보관하는 공간
- 다른 브랜치로 이동하거나 pull 전에 작업물을 보관할 때 사용
- 명령어: git stash (저장), git stash pop (복원)
✅ Git 필수 명령어 정리
기능 명령어
변경사항 확인 | git status |
파일 변경 내역 확인 | git diff |
파일 스테이징 | git add 파일명 / git add . (전체) |
커밋 | git commit -m "커밋 메시지" |
원격 최신 내역 가져오기 | git fetch |
가져온 내역 병합 | git merge origin/브랜치명 |
가져오고 병합 한 번에 | git pull origin 브랜치명 |
푸시 | git push origin 브랜치명 |
브랜치 목록 보기 | git branch |
브랜치 생성 | git branch 브랜치명 |
브랜치 이동 | git checkout 브랜치명 |
브랜치 생성 및 이동 | git checkout -b 브랜치명 |
브랜치 삭제 | git branch -d 브랜치명 |
스태시 저장 | git stash |
스태시 목록 확인 | git stash list |
스태시 복원 | git stash pop |
병합 충돌 시 해결 후 커밋 | 충돌 해결 후 git add . → git commit |
로그 보기 | git log --oneline --graph --all |
이번에 경험한 문제와 관련된 명령어
1. Pull 시 충돌 (로컬 변경사항 존재)
- 에러 메시지: Your local changes to the following files would be overwritten by merge:
- 해결방법:
- git add . 후 커밋하거나
- git stash로 잠시 보관한 뒤 git pull 실행
2. 원격 브랜치 머지 이후 main 뒤에 '2개 뒤' 라고 나오는 현상
- 이는 로컬 main 브랜치가 최신 원격 main과 동기화되지 않아서 발생.
- 해결방법:
- main 브랜치 더블클릭 (checkout)
- fetch 클릭으로 최신 커밋 가져오기
- pull로 병합 후 최신 상태 유지
3. Merge Conflict
- 충돌 시: 소스트리에서 충돌 파일 확인 후 직접 수정 -> 스테이징 -> 커밋 -> 푸시
프로젝트 클론 후 브랜치 생성, 작업, PR, 병합, 최신화 전체 과정
1.원격 저장소 클론
git clone [원격 저장소 URL]
2.새 브랜치 생성 및 이동
git checkout -b feature/내기능명
3.코드 작업 후 커밋
git add .
git commit -m "feat: 작업 내용 설명"
4.원격 브랜치 푸시
git push origin feature/내기능명
- GitHub에서 Pull Request(PR) 생성 후 리뷰 및 병합 요청
- GitHub 페이지에서 PR 버튼 클릭 후 요청
- 관리자가 PR을 머지한 이후, 내 로컬 main 최신화
- GitHub 페이지에서 PR 버튼 클릭 후 요청
git checkout main
- 원격 최신 상태 패치
git fetch origin
- 패치한 내용을 병합 (pull)
git pull origin main
- 이제 내 main 브랜치가 최신 상태가 됨
추가 작업 시 위 과정을 반복
커밋 타입 종류 및 작성 가이드
1. 주요 커밋 타입
타입설명언제 사용하는지 예시
feat | 새로운 기능 추가 | 새로운 게시글 작성 기능, 댓글 작성 기능 추가 시 |
fix | 버그 수정 | 버튼 클릭 시 오류 수정, 잘못된 렌더링 수정 시 |
docs | 문서 수정 (코드 변경 없음) | README, 주석 수정 등 문서 관련 업데이트 시 |
style | 코드 포맷, 세미콜론 누락, 코드 스타일 변경 (논리 변경 없음) | prettier 적용, 띄어쓰기/들여쓰기 수정 |
refactor | 코드 리팩토링 (기능 변화 없이 구조 개선) | 코드 최적화, 함수 분리 및 정리 시 |
test | 테스트 코드 추가/수정 | jest나 vitest 테스트 케이스 작성/수정 시 |
chore | 빌드 작업, 패키지 매니저 설정, 기타 비기능성 작업 | .gitignore 수정, npm 패키지 업데이트, 빌드 설정 변경 시 |
perf | 성능 개선 | 렌더링 속도 개선, 불필요한 연산 최적화 |
ci | CI 설정 및 스크립트 수정 | GitHub Actions 수정, CI/CD 설정 변경 |
revert | 이전 커밋 되돌리기 | 잘못된 커밋을 되돌려야 할 때 사용 |
2. 상황별 추천 커밋 타입
- 코드 수정만 했다 → fix 또는 refactor (단순 수정 vs 구조 리팩토링)
- 새로운 기능 개발을 했다 → feat
- 문서나 주석을 수정했다 → docs
- 스타일 수정만 했다 (세미콜론, 띄어쓰기 등) → style
- 빌드 및 패키지 관련 수정 → chore
3. 커밋 메시지 작성 템플릿
<type>: <간단한 설명>
(선택) 본문: 왜 이렇게 변경했는지 추가 설명
(선택) footer: 관련된 이슈 번호 등
예시:
feat: 게시글 작성 기능 구현
- PostForm.vue 작성 및 폼 검증 추가
- pinia store에 게시글 추가 메서드 연결
Closes #12
fix: 댓글이 등록되지 않는 문제 수정
- CommentForm.vue에서 onSubmit 메서드 수정
chore: .gitignore에 .nuxt 디렉토리 추가
필요하면 소스트리에서 자동으로 prefix 선택하는 방법도 알려줄 수 있으니 요청하면 설명해줄게!