반응형
🧠 Git 터미널 사용법 완전 정리 (기본부터 고급까지)
Git을 터미널에서 사용할 때 꼭 알아야 할 명령어들을 한눈에 보기 좋게 정리했습니다.
기본 사용법부터 브랜치 관리, 커밋 되돌리기, 서브모듈, 히스토리 탐색, .gitignore, merge vs rebase, GitHub Actions, CI/CD, Git Flow 전략, GitHub Pages, 고급 기능까지 모두 포함되어 있어요.
✅ 기본 명령어
git init # 저장소 초기화
git clone <URL> # 원격 저장소 복제
git status # 변경사항 확인
git add <파일명> # 파일 스테이지에 추가
git commit -m "메시지" # 커밋 생성
git log # 커밋 히스토리 보기
git diff # 변경된 내용 비교
git push # 원격 저장소에 푸시
git pull # 원격 변경사항 병합
git fetch # 원격 변경사항 가져오기만 함🔄 커밋 되돌리기
git restore <파일명> # 변경사항 되돌리기
git reset --soft HEAD~1 # 마지막 커밋 되돌리기 (스테이지 유지)
git reset --hard HEAD~1 # 마지막 커밋 완전 삭제
git revert <커밋해시> # 되돌리는 새 커밋 생성🌿 브랜치 관리
git branch # 브랜치 목록
git branch <브랜치명> # 새 브랜치 생성
git checkout <브랜치명> # 브랜치 이동
git switch <브랜치명> # 브랜치 이동 (추천)
git branch -d <브랜치명> # 병합된 브랜치 삭제
git branch -D <브랜치명> # 강제 삭제
git branch -m <이전> <새이름> # 브랜치 이름 변경
git push origin <새이름> # 원격 푸시
git push origin --delete <이전> # 원격 삭제
git push --set-upstream origin <브랜치명> # 원격 연결📦 서브모듈 관리
git submodule add <URL> <경로> # 서브모듈 추가
git submodule update --init --recursive # 초기화 및 다운로드
git submodule update --remote # 최신 커밋으로 갱신. [.gitmodules] 파일에 [branch = main] 를 추가해야 된다.
# 🔧 update --init --recursive 를 사용하는 이유
# 1. 누군가가 서브모듈이 포함된 Git 저장소를 git clone으로 복제했어.
# 2. 서브모듈 디렉토리는 비어 있거나 .gitmodules 파일만 있고 코드가 없을때.
# git submodule update --init → 서브모듈을 초기화하고 체크아웃함. 즉, 서브모듈 디렉토리에 실제 코드가 생김.
# git submodule update --init --recursive → 서브모듈 안에 또 다른 서브모듈이 있을 경우, 하위 서브모듈까지 모두 초기화함.
# 서브모듈 제거
git config -f .gitmodules --remove-section submodule.<경로>
git config --remove-section submodule.<경로>
git rm --cached <경로>
rm -rf <경로>
rm -rf .git/modules/<경로>🕰️ 히스토리 탐색 및 이전 버전으로 돌아가기
git log # 커밋 히스토리
git show <커밋해시> # 커밋 상세 보기
git checkout <커밋해시> # 해당 커밋으로 이동
git switch -c <새브랜치명> # 새 브랜치 생성
git reflog # HEAD 이동 기록
git reset --hard HEAD@{n} # 이전 상태로 복원📌 기타 유용한 명령어
git stash # 변경사항 임시 저장
git stash pop # 저장한 변경사항 복원
git remote -v # 원격 저장소 확인
git config --global user.name "이름" # 사용자 이름 설정
git config --global user.email "이메일" # 이메일 설정
git tag <태그명> # 태그 생성
git tag -d <태그명> # 태그 삭제
git push origin <태그명> # 태그 푸시
git push origin --delete <태그명> # 원격 태그 삭제📁 .gitignore 설정
# 빌드 결과물
/dist
/build
# 로그 파일
*.log
# OS/IDE 관련
.DS_Store
node_modules/
.vscode/
.env🔀 merge vs rebase 차이점
| 항목 | git merge | git rebase |
|---|---|---|
| 목적 | 브랜치 병합 | 커밋 재배치 |
| 커밋 기록 | 병합 커밋 생성 | 히스토리 깔끔하게 정리 |
| 충돌 처리 | 병합 시점에서 충돌 발생 | 각 커밋마다 충돌 가능 |
| 협업 시기 | 공용 브랜치 병합 시 사용 | 개인 브랜치 정리 시 사용 |
# merge
git checkout main
git merge feature/login
# rebase
git checkout feature/login
git rebase main⚙️ GitHub Actions & CI/CD 연동
.github/workflows/ci.yml
name: CI Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test🧭 Git Flow 전략
# 기능 개발
git checkout -b feature/login develop
# 릴리즈 준비
git checkout -b release/v1.0 develop
# 릴리즈 완료
git checkout main
git merge release/v1.0
git tag v1.0
# 긴급 수정
git checkout -b hotfix/urgent-fix main🌐 GitHub Pages 배포
docs/폴더 또는 루트에index.html생성- GitHub → Settings → Pages → Source 설정
https://사용자명.github.io/저장소명주소로 접속
npm run build
git add dist
git commit -m "배포"
git subtree push --prefix dist origin gh-pages🧩 고급 기능
git cherry-pick <커밋해시> # 특정 커밋만 적용
git bisect # 버그 발생 시점 찾기
git blame <파일> # 각 줄의 수정자 확인
git clean -fd # 추적되지 않은 파일 삭제
git archive --format=zip HEAD > latest.zip # zip으로 내보내기📦 Git LFS (대용량 파일 관리)
git lfs install
git lfs track "*.psd"
git add .gitattributes
git add design.psd
git commit -m "Add large file"🧠 Monorepo 전략
/apps
/web
/mobile
/packages
/ui
/utils도구 추천: Nx, Turborepo, Lerna, pnpm workspace
📚 Git 문서화 팁
README.md: 프로젝트 소개CONTRIBUTING.md: 기여 가이드CHANGELOG.md: 변경 이력LICENSE: 라이선스 명시
반응형