본문 바로가기

개발

개발자 필수 도구 Git: 커밋부터 되돌리기까지 기초 사용법 마스터하기!

반응형

현대 소프트웨어 개발에서 Git은 빼놓을 수 없는 핵심 도구입니다. 여러 명이 함께 작업하거나, 프로젝트의 변경 이력을 효율적으로 관리하는 데 Git만큼 강력한 버전 관리 시스템은 없죠. Git의 기본적인 명령어들을 이해하고 능숙하게 사용하는 것은 모든 개발자 주니어개발 입문자에게 필수적인 역량입니다. 이 글에서는 Git의 가장 핵심적인 명령어인 커밋(Commit), 푸시(Push), 리스토어(Restore), 리셋(Reset), 리버트(Revert)의 개념과 사용법을 쉽고 자세하게 설명하며, 각 명령어의 차이점과 적절한 사용 시점을 알아보겠습니다!

목차

  • Git의 기본 개념 다시 한번 잡기: 저장소, 작업 트리, 스테이징 영역
  • Git으로 변경 사항 기록하기: git add와 git commit
    • git add: 변경 사항 준비
    • git commit: 변경 사항 확정
  • 원격 저장소와 협업하기: git push와 git pull
    • git push: 로컬 변경 사항 원격으로 전송
    • git pull: 원격 저장소의 변경 사항 가져오기
  • 실수했을 때 되돌리기 1: git restore (변경 내용 복구)
  • 실수했을 때 되돌리기 2: git reset (커밋 이력 되돌리기)
    • --soft, --mixed, --hard 옵션 이해하기
  • 실수했을 때 되돌리기 3: git revert (안전하게 변경 취소)
  • reset과 revert의 결정적인 차이점
  • Git 기초 사용법, 이것만 기억하세요!

Git의 기본 개념 다시 한번 잡기: 저장소, 작업 트리, 스테이징 영역

Git 명령어를 배우기 전에, Git이 코드를 관리하는 세 가지 주요 영역을 이해하는 것이 중요합니다.

  • 작업 트리(Working Tree): 현재 파일들이 눈에 보이는 실제 작업 공간입니다. 여기서 코드를 편집합니다.
  • 스테이징 영역(Staging Area / Index): 다음 커밋에 포함할 변경 사항들을 모아두는 임시 공간입니다. git add 명령어를 통해 파일들이 이곳으로 이동합니다.
  • 로컬 저장소(Local Repository): 커밋된 변경 이력들이 .git 디렉토리 내부에 영구적으로 저장되는 공간입니다.

Git으로 변경 사항 기록하기: git add와 git commit

새로운 기능을 개발하거나 버그를 수정하면, 그 변경 사항들을 Git에 기록해야 합니다. 이 과정은 주로 git add와 git commit으로 이루어집니다.

git add: 변경 사항 준비

git add 명령어는 작업 트리에서 변경된 파일들을 스테이징 영역에 추가합니다. 즉, "이제 이 변경 사항들을 다음 커밋에 포함할 준비가 되었다!"라고 Git에게 알리는 단계입니다.

  • git add <파일이름>: 특정 파일만 스테이징.
  • git add .: 현재 디렉토리의 모든 변경된 파일을 스테이징.

git commit: 변경 사항 확정

git commit 명령어는 스테이징 영역에 있는 모든 변경 사항들을 로컬 저장소에 영구적으로 기록하는 명령어입니다. 이때 커밋 메시지를 작성하여 어떤 변경이 있었는지 명확하게 설명하는 것이 중요합니다.

  • git commit -m "커밋 메시지": 간략한 커밋 메시지와 함께 커밋.
  • 좋은 커밋 메시지는 미래의 자신이나 동료들이 변경 이력을 쉽게 파악할 수 있도록 돕습니다.

원격 저장소와 협업하기: git push와 git pull

Git은 로컬 저장소 외에 GitHub, GitLab, Bitbucket과 같은 원격 저장소(Remote Repository)를 통해 여러 개발자와 협업할 수 있게 해줍니다.

git push: 로컬 변경 사항 원격으로 전송

git push 명령어는 로컬 저장소에 커밋된 변경 이력들을 원격 저장소로 업로드합니다. 이제 다른 팀원들이 이 변경 사항들을 보고 가져갈 수 있게 됩니다.

  • git push origin <브랜치이름>: 특정 브랜치의 변경 사항을 원격 저장소(origin)로 푸시.

git pull: 원격 저장소의 변경 사항 가져오기

git pull 명령어는 원격 저장소의 최신 변경 사항들을 로컬 저장소로 가져와 병합(merge)하는 명령어입니다. 이는 다른 팀원들이 푸시한 변경 사항을 내 로컬 환경에 반영할 때 사용합니다.

  • git pull origin <브랜치이름>: 원격 저장소(origin)의 특정 브랜치에서 최신 변경 사항을 풀(pull).

실수했을 때 되돌리기 1: git restore (변경 내용 복구)

git restore는 최근에 Git에 추가된 명령어로, 작업 트리나 스테이징 영역의 변경 사항을 복구하는 데 사용됩니다. 이전 버전의 git checkout 역할을 일부 대체합니다.

  • git restore <파일이름>: 작업 트리에서 변경된 특정 파일을 마지막 커밋 상태로 되돌립니다 (스테이징되지 않은 변경 취소).
  • git restore --staged <파일이름>: 스테이징 영역에서 특정 파일을 내립니다 (커밋 예정이었던 변경 취소). 실제 파일 내용은 변경되지 않습니다.

실수했을 때 되돌리기 2: git reset (커밋 이력 되돌리기)

git reset은 로컬 저장소의 커밋 이력을 되돌리는 강력한 명령어입니다. 하지만 원격 저장소로 이미 푸시된 커밋에 대해 사용하면 협업에 문제가 생길 수 있으므로 주의해야 합니다.

  • git reset <커밋ID>: 지정된 커밋 ID 이후의 모든 커밋을 취소합니다. 이때 --soft, --mixed, --hard 옵션에 따라 작업 트리와 스테이징 영역의 상태가 달라집니다.

--soft, --mixed, --hard 옵션 이해하기

  • git reset --soft <커밋ID>:
    • 로컬 저장소의 HEAD 포인터만 지정된 커밋으로 이동합니다.
    • 작업 트리와 스테이징 영역의 파일 내용은 그대로 유지됩니다. 취소된 커밋의 변경 사항들이 스테이징 영역에 남아있어 다시 커밋할 수 있습니다.
  • git reset --mixed <커밋ID> (기본값):
    • 로컬 저장소의 HEAD 포인터와 스테이징 영역이 지정된 커밋으로 이동합니다.
    • 작업 트리의 파일 내용은 그대로 유지됩니다. 취소된 커밋의 변경 사항들이 작업 트리에 남아있고, 스테이징되지 않은 상태가 됩니다.
  • git reset --hard <커밋ID>:
    • 로컬 저장소의 HEAD 포인터, 스테이징 영역, 그리고 작업 트리의 파일 내용까지 모두 지정된 커밋으로 되돌립니다.
    • 주의: 변경 사항이 완전히 삭제되므로, 신중하게 사용해야 합니다. 되돌릴 수 없는 데이터 손실이 발생할 수 있습니다.

실수했을 때 되돌리기 3: git revert (안전하게 변경 취소)

git revert는 특정 커밋의 변경 사항을 되돌리지만, git reset과는 달리 새로운 커밋을 생성하여 변경을 취소합니다. 즉, 기존 커밋 이력을 보존하면서 특정 커밋의 내용을 되돌리는 것이죠.

  • git revert <커밋ID>: 지정된 커밋의 변경 사항을 되돌리는 새로운 커밋을 생성합니다.
  • 장점: 커밋 이력을 건드리지 않으므로, 이미 원격 저장소에 푸시된 커밋을 되돌릴 때 안전하게 사용할 수 있습니다. 협업 환경에서 선호되는 방식입니다.

 

reset과 revert의 결정적인 차이점

  • git reset: HEAD 포인터를 과거로 직접 이동시켜 기존 커밋 이력을 수정/삭제합니다. 주로 로컬에서 아직 푸시하지 않은 변경 사항을 되돌릴 때 사용합니다.
  • git revert: 특정 커밋의 변경 사항을 되돌리는 새로운 커밋을 생성합니다. 기존 커밋 이력을 보존하므로, 이미 공유된(푸시된) 커밋을 되돌릴 때 안전하게 사용됩니다.

Git 기초 사용법, 이것만 기억하세요!

git add, git commit, git push, git pull은 Git을 사용하는 기본적인 흐름을 형성합니다. 그리고 git restore, git reset, git revert는 개발 과정에서 발생할 수 있는 실수를 안전하게 (또는 강력하게) 되돌리는 데 필수적인 명령어입니다. 각 명령어의 역할과 차이점을 정확히 이해하고 상황에 맞게 사용하는 것이 Git을 효과적으로 활용하는 핵심입니다. 꾸준히 연습하여 Git을 자유자재로 다루는 개발자로 성장하시길 바랍니다!

반응형