Git과 협업: 초보자 가이드 (실제 비유 포함)

발행: (2026년 6월 8일 AM 09:39 GMT+9)
10 분 소요
원문: Dev.to

출처: Dev.to

Git & Collaboration: A Beginner's Guide (With Real Analogies) 표지 이미지

Sanudin

🌐 이 글을 Bahasa Indonesia 로 읽으려면 여기를 클릭하세요.

📝 이 글에 대한 참고 사항

이 포스트는 버전 관리와 Git 협업에 대한 개인 학습 노트를 기반으로 작성되었습니다. 노트를 더 읽기 쉽고 유용하게 만들기 위해 AI와 함께 내용을 확장하고 블로그 형식으로 정리했습니다. 아이디어와 학습 여정, 이해는 전부 저의 것이며, AI는 글쓰기와 프레젠테이션을 도와주었습니다.

Git을 배우는 것이 두려울 필요는 없습니다. 이 글에서는 버전 관리와 협업의 핵심 개념을 누구나 이해할 수 있는 간단한 비유와 함께 풀어보겠습니다.


Git이란?

Git은 버전 관리 시스템입니다. 코드를 위한 저장 시스템이라고 생각하면 됩니다—비디오 게임의 저장 지점과 비슷하죠. 저장(커밋)할 때마다 Git은 그 순간 프로젝트의 상태를 기억합니다. 문제가 생기면 언제든지 되돌릴 수 있습니다.


Repository: 프로젝트의 창고

레포지토리(또는 “repo)는 Git이 감시하는 폴더입니다. 종류는 두 가지:

  • 로컬 레포지토리: 내 컴퓨터에 존재합니다. 개인 작업 공간.
  • 원격 레포지토리: 서버에 존재합니다(GitHub, GitLab, Bitbucket 등). 팀이 공유하는 “공식” 복사본.

두 레포는 원격 URL을 통해 연결되며, 로컬 변경 사항을 푸시하고 다른 사람의 변경 사항을 풀 할 수 있습니다.

git init                            # 폴더 추적 시작
git remote add origin <url>        # 원격 레포와 연결
git push origin main               # 커밋을 원격에 전송
git pull origin main               # 원격 최신 내용 받아오기

Commit: 프로젝트의 저장 지점

커밋은 특정 시점의 프로젝트 스냅샷입니다. 각 커밋은 다음을 포함합니다.

  • 어떤 내용이 바뀌었는지 설명하는 메시지
  • 고유 ID(해시)
  • 타임스탬프
git add .                           # 모든 변경 사항 스테이징
git commit -m "Add homepage layout" # 스냅샷 저장
git log --oneline                   # 커밋 히스토리 보기

의미 있는 커밋 메시지를 작성하세요. 미래의 당신이 현재의 당신에게 감사할 겁니다.


Checkout, Reset, Revert: 시간 여행

세 명령은 모두 커밋 히스토리와 상호작용하지만, 작동 방식이 크게 다릅니다.

git checkout — 과거를 잠시 방문

시간 여행자가 방문 허가증을 가진 것과 같습니다. 과거 커밋을 살펴볼 수 있지만, 영구적인 변화를 주지는 않습니다.

git checkout <commit>               # 과거 커밋 방문
git checkout main                   # 현재(main)로 복귀
git checkout -b new-branch          # 과거 커밋에서 새 브랜치 시작

git reset — 히스토리 지우기

과거 커밋으로 돌아가 그 이후의 모든 것을 제거합니다. 특히 이미 푸시한 경우 조심해서 사용하세요.

git reset --soft HEAD~1   # 마지막 커밋 되돌리되, 변경 내용은 스테이징 유지
git reset --hard HEAD~1   # 마지막 커밋 되돌리고, 변경 내용도 삭제

git revert — 안전한 되돌리기

이전 커밋을 취소하는 새로운 커밋을 만듭니다. 히스토리는 그대로 유지되므로, 공유 레포에서 가장 안전한 옵션입니다.

git revert <commit>   # 커밋을 안전하게 되돌리기

규칙: 이미 푸시한 경우 revert를 사용하고, 아직 푸시하지 않았다면 reset을 사용해도 괜찮습니다.


Branches: 코드의 평행 우주

브랜치는 독립적인 개발 라인입니다. main 같은 안정된 브랜치를 건드리지 않고도 기능이나 버그 수정을 진행할 수 있습니다.

git switch -c feature/dark-mode   # 새 브랜치 생성 및 전환
git switch main                   # main 브랜치로 전환
git branch -d feature/dark-mode    # 병합된 브랜치 삭제
git push origin feature/dark-mode  # 브랜치를 원격에 푸시

흔히 쓰이는 브랜치 명명 규칙

종류접두사예시
새 기능feature/feature/dark-mode
버그 수정fix/fix/login-redirect
긴급 수정hotfix/hotfix/payment-crash

Stash: 미완성 작업을 위한 일시 정지 버튼

기능을 절반만 구현했는데 코드가 엉망이고 아직 커밋할 준비가 안 됐다고 가정해봅시다. 팀 리더가 “메인에서 급히 이 버그 좀 고쳐줄래?” 라고 요청한다면?

커밋되지 않은 상태에서는 브랜치를 바꿀 수 없습니다. 하지만 아직 커밋하고 싶지도 않은 상황이죠. 해결책은 stash입니다.

비유: 그림을 그리고 있는데 테이블을 다른 용도로 써야 할 때, 그림을 서랍에 넣어두고 나중에 꺼내서 이어 그리는 것과 같습니다.

git stash                           # 작업을 임시 저장
git switch fix/some-bug             # 자유롭게 브랜치 전환
# ... 버그 고치고 커밋 후 다시 돌아오기 ...
git switch feature/dark-mode
git stash pop                       # 작업 복원

여러 개의 stash 관리하기

git stash push -m "WIP: dark mode palette"   # 이름 붙인 stash
git stash list                               # 모든 stash 확인
git stash pop                                # 가장 최근 stash 복원
git stash apply stash@{1}                    # 특정 stash 복원(목록에 남김)
git stash drop stash@{1}                     # 특정 stash 삭제
git stash -u                                 # 추적되지 않은 파일도 포함

Merge & Pull Requests: 전체 흐름 연결하기

기능 구현이 끝났다면 merge를 통해 main에 합칩니다.

git switch main
git merge feature/dark-mode

GitHub/GitLab에서는 보통 Pull Request(PR) 형태로 진행합니다.

  1. 브랜치를 푸시하고 PR을 엽니다.
  2. 팀원이 코드를 리뷰하고 피드백을 남깁니다.
  3. 승인되면 PR이 머지됩니다.

Merge 옵션

방법결과
Merge commit모든 커밋을 보존하고 머지 커밋을 추가
Squash and merge모든 커밋을 하나로 압축
Rebase and merge커밋을 main 위에 재배치, 머지 커밋 없음

충돌 해결

두 브랜치가 같은 라인을 수정하면 Git이 자동으로 머지하지 못합니다. 다음과 같은 표시가 나타납니다.

>>>>>>> feature/dark-mode
// 충돌 난 코드
=======

수동으로 충돌을 해결한 뒤:

git add <>
git commit

Code Reviews: 품질 게이트

PR이 머지되기 전에 누군가가 리뷰합니다. 좋은 리뷰어는 다음을 체크합니다.

  • 논리적 정확성
  • 가독성 및 네이밍
  • 테스트 커버리지
  • 복잡도 (필요 이상으로 복잡하지 않은가?)
  • 스타일 가이드 준수

코드 리뷰는 단순히 실수를 잡는 것이 아니라, 팀 내 지식 전파의 중요한 수단이기도 합니다.


Fork & Clone: 접근 권한 없이 기여하기

  • Fork: 다른 사람의 레포를 자신의 GitHub 계정으로 복사합니다.
  • Clone: 레포를 로컬 머신에 복사합니다.

일반적인 오픈소스 기여 흐름:

# 1. GitHub에서 Fork
0 조회
Back to Blog

관련 글

더 보기 »