코딩

개발자 필수 Git 명령어 완전 정리 — 브랜치, 서브모듈, CI/CD, GitHub Pages까지

귀찮아란 닉네임을 누군가 사용하고 있다 2025. 10. 16. 06:10
반응형

🧠 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 배포

  1. docs/ 폴더 또는 루트에 index.html 생성
  2. GitHub → Settings → Pages → Source 설정
  3. 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: 라이선스 명시

반응형