Git과 Pull Request: 협업 효율성을 높이는 마법 같은 도구


Git 분산형 버전 관리 시스템으로 협업과 효율성 잡기

프로젝트를 진행하다 보면 매일같이 파일을 수정하고, 어제 작업했던 내용과 비교하거나 특정 시점으로 되돌아가고 싶은 순간들이 있습니다. 특히 여러 명이 동시에 같은 코드를 수정하고 새로운 기능을 추가하거나 버그를 고치다 보면 “이전 버전은 어디에 있지?” “누가 무엇을 수정했지?” 하는 고민들이 생기는데요. 이럴 때 Git이라는 분산형 버전 관리 시스템을 사용하면 이런 문제들을 한 방에 해결할 수 있습니다.

Git이란?

출쳐: git 공식 홈페이지

Git은 ‘분산형 버전 관리 시스템’으로, 우리가 작업하는 소스 코드나 문서 등의 파일 변경 이력을 효율적으로 관리하는 도구입니다. 다수의 인원이 협업할 때 매번 백업용 파일을 복사할 필요 없이, Git을 이용하면 특정 시점으로 쉽게 되돌아갈 수 있고, 누가 어떤 내용을 수정했는지를 깔끔하게 파악할 수 있습니다.

여러 명이 함께 작업하는 리포지토리(저장소)에서, 각자의 변경 내용을 반영할 때 무질서해지기 쉽지만, Git은 변경 이력 관리, 충돌 감지, 버전 비교 기능 등을 제공하여 협업을 보다 체계적으로 만들어줍니다.

Git 저장소(Repository) 개념

Git을 사용하려면 저장소(Repository) 개념을 알아두는 것이 좋아요. 저장소는 크게 원격(Remote)로컬(Local)로 나뉩니다.

  • 로컬(Local) 저장소: 내 컴퓨터에 위치한 저장소로, 여기서 자유롭게 수정하고 커밋할 수 있어요.
  • 원격(Remote) 저장소: GitHub, GitLab, Bitbucket 등의 서버에 위치한 저장소로, 로컬에서 작업한 내용을 git push 명령으로 반영하면 다른 팀원들도 git pull 명령으로 해당 변경사항을 가져올 수 있습니다.

기본적인 협업 흐름은 이렇습니다:

  1. 로컬에서 작업(파일 수정, 추가 등)
  2. git add로 변경사항을 스테이징, git commit으로 로컬 저장소에 기록
  3. git push로 원격 저장소에 반영
  4. 다른 팀원이 원격 저장소 변경사항을 git pull로 가져와 이어서 작업

커밋(Commit)과 메시지

Git에서 변경 이력을 저장하는 단위가 “커밋”입니다. 커밋을 할 때는 반드시 변경 내용을 설명하는 메시지를 남겨야, 나중에 “언제 무엇을 왜 수정했나?”를 명확히 알 수 있습니다. 기본이지만 생각보다 많은 사람들이 간과하거나 안하는 경우가 많습니다. 그러나 반드시 해야한다. 협업에서 이러한 커밋 메시지를 남기지 않으면 history가 남지 않아 협업 사람들이 어리둥절해 하거나 혹은 시스템을 튼튼하게 관리하거나 개발하기 힘들게 됩니다.

작성 예시이다.

Add user login feature

- Added login form to the main page
- Implemented authentication logic in auth.js

이런 식으로 메시지를 깔끔히 정리해 두면, 지나고 나서도 해당 시점의 변화 의도를 알 수 있어 편리하고 무엇보다 안정적으로 시스템을 관리할 수 있게 됩니다.

기본 명령어 정리

  • git init: 현재 디렉토리를 Git 저장소로 초기화
  • git add [파일명]: 해당 파일을 커밋 준비상태(스테이징)로 만듦
  • git commit -m “메시지”: 스테이징된 변경사항을 커밋으로 확정
  • git push: 로컬 커밋을 원격 저장소로 업로드
  • git pull: 원격 저장소 변경사항을 로컬로 가져오기

추가로, git restore [파일명]을 통해 git add로 스테이징한 변경을 취소할 수도 있습니다.

커밋 되돌리기: reset 옵션들

실수로 잘못 커밋했을 때 git reset 명령으로 이전 커밋 시점으로 되돌아갈 수 있습니다. 여기서 --soft, --mixed, --hard 옵션에 따라 되돌리는 범위가 달라져요.

  • --soft: 이전 커밋으로 돌아가되, 워킹 디렉토리와 스테이징 상태를 그대로 유지합니다.
  • --mixed (기본 옵션): 스테이징만 해제하고 워킹 디렉토리는 그대로 둡니다.
  • --hard: 워킹 디렉토리의 변경사항까지 모두 취소해버립니다. 이 경우 파일 자체가 날아갈 수 있으므로 주의해야 해요.

원격 저장소에 반영하기: git push

로컬에서 커밋까지 완료했다면 git push 명령을 통해 원격 저장소에 반영해야 다른 팀원들이 변경사항을 공유받을 수 있습니다.

처음 원격 저장소를 설정할 때는 다음과 같은 명령을 자주 사용합니다.

git remote add origin [원격 저장소 주소]
git branch -M main
git push -u origin main

이후엔 git push 명령만으로 손쉽게 변경사항을 밀어넣을 수 있어요.

Pull Request(PR)로 협업하기

단순히 git push로 변경사항을 반영하는 것 외에도, GitHub에서는 Pull Request(PR) 기능을 통해 다른 팀원이나 프로젝트 관리자의 코드 리뷰를 받을 수 있어요. 특히 오픈소스 프로젝트나 다수 인원이 참여하는 대규모 프로젝트에서 협업 시, PR 프로세스는 굉장히 중요합니다.

기본적인 Pull Request 작업 흐름은 다음과 같습니다.

  1. Fork: 협업하고 싶은 GitHub 저장소 페이지에 들어가 Fork 버튼을 눌러보세요. 이렇게 하면 해당 프로젝트를 나만의 GitHub 계정으로 복사해올 수 있습니다. (예: 원본 저장소: github.com/OriginalOwner/Project → 포크 후: github.com/MyAccount/Project)
  2. Clone: 이제 내 GitHub 계정에 있는 복사본 프로젝트를 로컬로 가져오기 위해 git clone [내 리포지토리 주소]를 실행합니다. 그러면 로컬에서 해당 프로젝트를 편집할 수 있어요.
  3. 이슈 확인: 프로젝트에서 해결해야 할 이슈(Issue)를 확인합니다. 이슈 내용, 변경 요청 사항, PR 신청 폼(템플릿) 등을 미리 살펴보세요. 다른 사람들은 어떤 식으로 PR을 올렸는지도 함께 확인하는 게 좋아요.
  4. 브랜치 생성 및 수정 작업: 문제 부분을 수정하기 전에 새로운 브랜치를 만듭니다. 예를 들어 git checkout -b fix-login-bug 명령으로 새로운 브랜치를 만든 뒤, 그곳에서 코드를 고치고 git add, git commit, git push까지 진행합니다.
  5. Pull Request 생성: 수정이 끝나면, 내 GitHub 계정에 있는 해당 프로젝트 페이지로 가서 Pull Request 버튼을 눌러보세요. 새로 생성한 브랜치를 선택하고, 변경 내용을 리뷰어가 이해하기 쉽게 설명합니다. 다른 사람들이 사용한 PR 템플릿이나 이슈에서 안내한 양식을 참고하면 더 깔끔한 PR을 만들 수 있어요.

이 과정을 거치면, 원래의 프로젝트 관리자가 내 변경사항을 검토(리뷰)하고, 문제가 없다면 해당 변경사항을 원본 저장소에 병합(merge)하는 식으로 협업이 진행됩니다.

주의사항

  • 원격 저장소가 private이거나 용량 문제로 git push를 거부하는 경우가 있을 수 있습니다. 이럴 땐 GitHub나 GitLab 정책, 계정 권한, LFS(Large File Storage) 사용 여부 등을 확인해야 합니다.
  • git reset --hard 명령어는 파일을 날려버릴 수 있으므로 신중히 사용하세요.
  • PR을 할 때 다른 사람의 이슈 해결 방식, PR 템플릿 사용 예시를 참고하면 원활한 협업에 큰 도움이 됩니다.

마무리

Git은 프로그래밍 작업을 타임머신처럼 관리할 수 있는 강력한 도구입니다. 특히 Pull Request 과정을 통해 코드 리뷰와 협업 효율성을 극대화할 수 있고, 다양한 브랜치 전략으로 프로젝트를 유연하게 운영할 수 있어요.

처음엔 어려울 수 있지만, git add -> git commit -> git push라는 기본 흐름과 git pull, git reset, git restore 등의 명령어에 익숙해지고, 나아가 PR(Pull / Request) 흐름을 이해한다면 복잡한 프로젝트에서도 체계적으로 협업할 수 있습니다. 앞으로 Git의 기능을 하나씩 익히면서 자신만의 협업 및 버전 관리 스타일을 구축해보세요.

참고.

Leave a Comment

error: Content is protected !!