Git을 활용한 작업 관리와 자주 사용하는 명령어들

Git을 활용하여 작업 중인 변경 사항을 관리하고, 효율적인 버전 관리를 위해 자주 사용하는 명령어와 커밋 메시지 형식에 대해 알아보는 가이드입니다.
Git을 활용한 작업 관리와 자주 사용하는 명령어들
Photo by Yancy Min / Unsplash

On this page

오늘은 Git을 사용해 작업을 관리하는 방법과 자주 사용하는 Git 명령어들에 대해 알아보겠습니다. 이 글을 통해 Git을 더욱 효과적으로 사용할 수 있기를 바랍니다.

작업 중인 변경 사항을 표현하는 방법

작업 중인 변경 사항을 명확하게 표현하기 위해서는 일관된 커밋 메시지 형식을 사용하는 것이 중요합니다. 일반적으로 사용하는 커밋 메시지 형식과 그 예시를 함께 살펴보겠습니다.

커밋 메시지 형식

  1. Conventional Commits 형식

Conventional Commits는 커밋 메시지의 구조를 표준화하여 변경 사항의 목적과 영향을 명확하게 설명하는 방법입니다. 다음은 일반적으로 사용되는 커밋 유형입니다:

  • feat: 새로운 기능 추가
  • fix: 버그 수정
  • docs: 문서 관련 변경
  • style: 코드 포맷팅, 세미콜론 누락 등 코드 자체의 변경이 없는 경우
  • refactor: 코드 리팩토링 (기능 변화 없음)
  • test: 누락된 테스트 추가 또는 기존 테스트 수정
  • chore: 빌드 과정 또는 보조 도구 변경 (라이브러리 추가, 설정 파일 수정 등)
  • perf: 성능 개선

예시:

git commit -m "feat: add user authentication feature"
git commit -m "fix: resolve login issue"
git commit -m "docs: update API documentation"
git commit -m "style: format code with prettier"
git commit -m "refactor: simplify user service logic"
git commit -m "test: add unit tests for login service"
git commit -m "chore: update dependencies"
git commit -m "perf: improve query performance"

  1. Hotfix

hotfix는 긴급 수정 사항을 나타내기 위해 사용됩니다. 이는 보통 중요한 버그 수정이나 긴급 패치를 의미합니다.

예시:

git commit -m "hotfix: correct critical security vulnerability"

작업 브랜치 이름 규칙

작업 유형에 따라 브랜치 이름도 일관된 규칙을 따를 수 있습니다. 일반적으로 다음과 같은 형식을 사용합니다:

  • feature/{작업_설명}: 새로운 기능 작업
  • fix/{작업_설명}: 버그 수정 작업
  • hotfix/{작업_설명}: 긴급 수정 작업

예시:

git checkout -b feature/user-authentication
git checkout -b fix/login-issue
git checkout -b hotfix/critical-vulnerability

Pull Request (PR) 제목

PR 제목도 커밋 메시지 형식과 유사하게 일관된 규칙을 따릅니다:

  • feat: 새로운 기능 추가
  • fix: 버그 수정
  • docs: 문서 수정
  • style: 코드 포맷팅 등
  • refactor: 리팩토링
  • test: 테스트 추가/수정
  • chore: 기타 작업
  • hotfix: 긴급 수정

예시:

feat: add user authentication feature
fix: resolve login issue
docs: update API documentation
style: format code with prettier
refactor: simplify user service logic
test: add unit tests for login service
chore: update dependencies
hotfix: correct critical security vulnerability

이와 같은 규칙을 따르면 작업의 목적과 내용을 명확하게 표현할 수 있어 협업이 원활해지고 변경 사항을 추적하기 쉬워집니다.

WIP (Work In Progress) 커밋

작업을 시작했지만 아직 완료하지 않은 경우, "WIP" (Work In Progress)라는 커밋 메시지를 사용합니다. 이는 작업이 아직 진행 중이며, 완성되지 않았음을 나타냅니다. "WIP" 커밋은 임시 저장용으로 사용되며, 주로 브랜치를 다른 사람과 공유하거나, 중간 상태를 저장해 두어야 할 때 유용합니다.

WIP 커밋 메시지 사용 예시

git commit -m "WIP: add initial user authentication logic"

WIP 브랜치 이름

작업 브랜치 이름에도 "WIP"를 포함하여 작업이 진행 중임을 나타낼 수 있습니다.

git checkout -b WIP/feature/user-authentication

WIP 커밋 후에 작업을 이어서 할 때

나중에 작업을 이어서 할 때, 추가 커밋을 작성하거나, WIP 커밋을 수정하는 방법도 있습니다.

WIP 커밋을 나중에 수정하는 방법

작업이 완료된 후 WIP 커밋을 수정하고 최종 커밋 메시지로 변경하려면 git rebase 또는 **git commit --amend**를 사용할 수 있습니다.

git commit --amend

# 변경사항 추가 후
git add .

# 마지막 커밋 메시지를 수정
git commit --amend -m "feat: complete user authentication feature"

git rebase -i 여러 개의 WIP 커밋을 하나의 최종 커밋으로 합치려면 **git rebase -i**를 사용할 수 있습니다.

# 마지막 몇 개의 커밋을 편집 (예: 3개 커밋)
git rebase -i HEAD~3

에디터가 열리면, WIP 커밋을 **squash**하여 하나의 최종 커밋으로 합칠 수 있습니다. 예를 들어:

pick abc1234 feat: start user authentication feature
squash def5678 WIP: continue working on authentication
squash ghi8901 WIP: finish authentication logic

모든 WIP 커밋이 최종 커밋 메시지로 합쳐집니다.

작업 진행 중인 PR

GitHub 또는 GitLab에서 작업이 아직 완료되지 않은 Pull Request(PR)를 올릴 때, 제목에 **WIP:**를 포함시켜 작업이 진행 중임을 나타낼 수 있습니다.

WIP: add user authentication feature

이렇게 하면 리뷰어가 작업이 아직 완료되지 않았음을 알 수 있으며, 필요에 따라 추가 작업을 계속 진행할 수 있습니다.

자주 사용하는 Git 명령어

Git을 사용하면서 자주 사용하는 명령어들을 정리해보았습니다. 이 명령어들은 다양한 작업을 효율적으로 관리하는 데 유용합니다.

1. 기본 명령어

git fetch: 원격 저장소의 변경 사항을 가져오지만, 병합은 하지 않습니다.

git fetch origin

git pull: 원격 저장소에서 변경 사항을 가져와 병합합니다.

git pull origin <branch>

git push: 로컬 커밋을 원격 저장소에 푸시합니다.

git push origin <branch>

git commit: 스테이징 영역의 변경 사항을 커밋합니다.

git commit -m "commit message"

git add: 변경된 파일을 스테이징 영역에 추가합니다.

git add <file>
git add .

git status: 현재 작업 디렉터리의 상태를 확인합니다.

git status

git clone: 원격 저장소를 복제합니다.

git clone <repository-url>

git init: 새로운 Git 저장소를 초기화합니다.

git init

2. 브랜치 관리

git rebase: 현재 브랜치를 다른 브랜치의 최신 커밋으로 재배치합니다.

git rebase <branch>

git merge: 다른 브랜치를 현재 브랜치에 병합합니다.

git merge <branch>

git checkout: 브랜치를 전환하거나 새로운 브랜치를 생성하고 전환합니다.

git checkout <branch>
git checkout -b <new-branch>

git branch: 로컬 브랜치 목록을 표시하거나 새로운 브랜치를 생성합니다.

git branch
git branch <new-branch>

3. 로그 및 히스토리

git diff: 변경 사항을 비교합니다.

git diff
git diff <commit>

git log: 커밋 로그를 표시합니다.

git log
git log --oneline --graph --all

4. 되돌리기 및 정리

git clean: 추적되지 않은 파일을 제거합니다.

git clean -f
git clean -fd

git revert: 특정 커밋을 되돌리는 새로운 커밋을 만듭니다.

git revert <commit>

git reset --hard origin/master: 로컬 브랜치를 원격 저장소의 master 브랜치와 동기화하고 모든 로컬 변경 사항을 삭제합니다.

git reset --hard origin/master

git reset: 커밋을 되돌리거나 스테이징 영역을 재설정합니다.

git reset --soft <commit>
git reset --mixed <commit>
git reset --hard <commit>

5. 스태시

git stash list: 저장된 스태시 목록을 표시합니다.

git stash list

git stash apply: 가장 최근의 스태시를 적용합니다.

git stash apply

git stash: 현재 변경 사항을 임시로 저장하고 작업 디렉터리를 깨끗하게 만듭니다.

git stash

6. 태그

git push --tags: 모든 태그를 원격 저장소에 푸시합니다.

git push --tags

git tag: 태그를 생성하거나 목록을 표시합니다.

git tag
git tag -a v1.0 -m "Version 1.0"

마무리

이 명령어들을 잘 활용하면 Git을 통해 버전 관리를 효율적으로 할 수 있습니다. 필요에 따라 각 명령어의 옵션을 확인하고 사용하는 것도 중요합니다. Git을 잘 활용하여 더욱 체계적이고 효율적인 개발 환경을 만들어 보세요! 🚀

여기까지 Git 사용법에 대한 기본적인 내용을 알아보았습니다. 다음에도 유익한 내용으로 찾아올게요. Happy Coding! 😊

Subscribe to Keun's Story newsletter and stay updated.

Don't miss anything. Get all the latest posts delivered straight to your inbox. It's free!
Great! Check your inbox and click the link to confirm your subscription.
Error! Please enter a valid email address!