Git 치트 시트: 모든 개발자를 위한 필수 명령어

· 12분 읽기

📑 목차

Git은 세계에서 가장 널리 사용되는 버전 관리 시스템으로, 개인 사이드 프로젝트부터 엔터프라이즈 애플리케이션까지 수백만 개의 프로젝트를 지원합니다. 혼자 개발하든 대규모 팀의 일원이든, 필수 Git 명령어를 알면 시간을 절약하고 실수를 방지할 수 있습니다.

이 포괄적인 치트 시트는 기본 작업부터 고급 워크플로우까지 일상적인 개발 작업에 필요한 모든 명령어를 다룹니다. 작업 유형별로 정리되어 있어 필요할 때 빠르게 찾을 수 있습니다.

이 페이지를 빠른 참조용으로 북마크하세요. Git 문서 및 README 파일 형식을 지정하려면 마크다운 에디터를 사용해 보세요.

설정 및 구성

첫 커밋 전에 신원을 구성해야 합니다. 이러한 설정은 전역으로 저장되며 모든 커밋에 첨부되므로 다른 개발자가 누가 어떤 변경을 했는지 알 수 있습니다.

초기 설정

git config --global user.name "Your Name"
git config --global user.email "[email protected]"
git config --global init.defaultBranch main
git config --global core.editor "code --wait"

--global 플래그는 이러한 설정을 컴퓨터의 모든 저장소에 적용합니다. 특정 프로젝트에 다른 설정이 필요한 경우 해당 저장소 내에서 --global 없이 동일한 명령을 실행하세요.

유용한 구성 옵션

git config --global color.ui auto              # 컬러 출력 활성화
git config --global core.autocrlf true         # 줄 끝 처리 (Windows)
git config --global core.autocrlf input        # 줄 끝 처리 (Mac/Linux)
git config --global pull.rebase false          # pull에 병합 전략 사용
git config --global alias.st status            # 단축키 생성: git st
git config --global alias.co checkout          # 단축키 생성: git co
git config --global alias.br branch            # 단축키 생성: git br
git config --global alias.ci commit            # 단축키 생성: git ci

프로 팁: 자주 사용하는 명령어에 대한 별칭을 만드세요. 위의 단축키는 주당 수백 번의 키 입력을 절약할 수 있습니다. git config --global alias.lg "log --oneline --graph --all"과 같이 시각적 커밋 히스토리를 위한 더 복잡한 별칭도 만들 수 있습니다.

구성 보기 및 편집

git config --list                              # 모든 설정 보기
git config --list --show-origin                # 각 설정이 정의된 위치 표시
git config user.name                           # 특정 설정 보기
git config --global --edit                     # 에디터에서 전역 구성 편집

저장소 생성

Git으로 작업을 시작하는 방법은 두 가지입니다: 새 저장소를 초기화하거나 원격 서버에서 기존 저장소를 복제하는 것입니다.

새 저장소 초기화

git init                                       # 현재 디렉토리에 저장소 초기화
git init my-project                            # 저장소가 있는 새 디렉토리 생성
git init --bare shared-repo.git                # 베어 저장소 생성 (서버용)

git init을 실행하면 Git은 모든 버전 관리 정보를 저장하는 숨겨진 .git 디렉토리를 생성합니다. 이 디렉토리에는 전체 프로젝트 히스토리, 구성 및 메타데이터가 포함됩니다.

기존 저장소 복제

git clone https://github.com/user/repo.git     # HTTPS를 통해 복제
git clone [email protected]:user/repo.git         # SSH를 통해 복제
git clone <url> my-folder                      # 특정 디렉토리로 복제
git clone --depth 1 <url>                      # 얕은 복제 (최신 커밋만)
git clone --branch develop <url>               # 특정 브랜치 복제

얕은 복제는 CI/CD 파이프라인이나 전체 히스토리 없이 최신 코드만 필요한 경우에 유용합니다. 훨씬 빠르고 디스크 공간을 적게 사용합니다.

빠른 팁: 비밀번호를 반복적으로 입력하지 않으려면 HTTPS 대신 SSH URL을 사용하세요. SSH 키를 한 번 설정하면 원활한 인증을 즐길 수 있습니다. GitHub, GitLab 및 Bitbucket 모두 SSH 인증을 지원합니다.

기본 워크플로우 명령어

핵심 Git 워크플로우는 세 가지 영역을 중심으로 진행됩니다: 작업 디렉토리(파일), 스테이징 영역(커밋할 준비가 된 변경사항), 저장소(커밋된 히스토리). 이 흐름을 이해하는 것이 Git을 효과적으로 사용하는 데 중요합니다.

상태 확인

git status                                     # 작업 트리 상태 확인
git status -s                                  # 짧은 형식 출력
git status -sb                                 # 브랜치 정보가 있는 짧은 형식

git status를 자주 실행하세요. 어떤 파일이 수정, 스테이징 또는 추적되지 않는지 표시하고 저장소의 현재 상태를 이해하는 데 도움이 됩니다.

변경사항 스테이징

git add file.txt                               # 특정 파일 스테이징
git add *.js                                   # 모든 JavaScript 파일 스테이징
git add .                                      # 모든 변경사항 스테이징
git add -A                                     # 모든 변경사항 스테이징 (삭제 포함)
git add -p                                     # 대화형으로 변경사항 스테이징 (패치 모드)
git add -u                                     # 수정 및 삭제된 파일만 스테이징

스테이징 영역(인덱스라고도 함)을 사용하면 정확한 커밋을 만들 수 있습니다. 여러 파일을 수정했더라도 포함하려는 변경사항만 스테이징할 수 있습니다.

프로 팁: git add -p를 사용하여 변경사항을 청크 단위로 검토하고 스테이징하세요. 이 대화형 모드를 사용하면 큰 변경사항을 논리적 커밋으로 분할하여 히스토리를 더 깔끔하고 검토하기 쉽게 만들 수 있습니다. 패치 모드 중에 ?를 눌러 사용 가능한 모든 옵션을 확인하세요.

변경사항 커밋

git commit -m "Add user authentication"       # 메시지와 함께 커밋
git commit -am "Fix login bug"                 # 추적된 파일 스테이징 + 커밋
git commit --amend                             # 마지막 커밋 수정
git commit --amend --no-edit                   # 메시지 변경 없이 수정
git commit -v                                  # 커밋 메시지 에디터에 diff 표시

명확하고 설명적인 커밋 메시지를 작성하세요. 좋은 형식은: 짧은 요약(50자 이하), 빈 줄, 필요한 경우 자세한 설명입니다.

변경사항 보기

git diff                                       # 스테이징되지 않은 변경사항 표시
git diff --staged                              # 스테이징된 변경사항 표시
git diff HEAD                                  # 마지막 커밋 이후 모든 변경사항 표시
git diff branch1..branch2                      # 두 브랜치 비교
git diff --stat                                # 변경 통계 표시
git diff --word-diff                           # 단어 수준 차이 표시

브랜치 및 병합

브랜치는 Git의 가장 강력한 기능 중 하나입니다. 메인 코드베이스에 영향을 주지 않고 기능, 수정 또는 실험을 격리하여 작업할 수 있습니다.

브랜치 관리

git branch                                     # 로컬 브랜치 목록
git branch -a                                  # 모든 브랜치 목록 (로컬 + 원격)
git branch feature-login                       # 새 브랜치 생성
git branch -d feature-login                    # 브랜치 삭제 (안전)
git branch -D feature-login                    # 강제 브랜치 삭제
git branch -m old-name new-name                # 브랜치 이름 변경
git branch -vv                                 # 추적 정보가 있는 브랜치 표시

브랜치 전환

git checkout feature-login                     # 브랜치로 전환
git checkout -b feature-signup                 # 새 브랜치 생성 및 전환
git checkout -                                 # 이전 브랜치로 전환
git switch feature-login                       # 브랜치 전환의 최신 방법
git switch -c feature-signup                   # 생성 및 전환 (최신 구문)

git switch 명령은 Git 2.23에서 여러 목적을 가진 git checkout의 더 명확한 대안으로 도입되었습니다. 브랜치 전환에는 둘 다 동일하게 작동합니다.

브랜치 병합

git merge feature-login                        # 현재 브랜치에 브랜치 병합
git merge --no-ff feature-login                # 병합 커밋 강제 (빨리 감기 없음)
git merge --squash feature-login               # 커밋을 하나로 스쿼시
git merge --abort                              # 진행 중인 병합 취소

병합할 때 Git은 두 브랜치의 변경사항을 결합합니다. 두 브랜치가 동일한 줄을 수정한 경우 수동 해결이 필요한 병합 충돌이 발생합니다.

병합 충돌 해결

충돌이 발생하면 Git은 파일에서 충돌하는 섹션을 표시합니다:

<<<<<<< HEAD
현재 변경사항
=======
병합되는 브랜치의 들어오는 변경사항
>>>>>>> feature-branch

충돌을 해결하려면:

  1. 충돌하는 파일을 열고 편집하여 충돌 해결
  2. 충돌 마커 제거 (<<<<<<<, =======, >>>>>>>)
  3. git add로 해결된 파일 스테이징
  4. git commit으로 병합 완료
git status                                     # 충돌이 있는 파일 확인
git add resolved-file.js                       # 충돌이 해결됨으로 표시
git merge --continue                           # 해결 후 병합 계속
git merge --abort                              # 포기하고 처음부터 다시 시작

프로 팁: 시각적 병합 도구를 사용하여 충돌을 더 쉽게 해결하세요. git config --global merge.tool <tool-name>으로 도구를 구성하고(옵션에는 meld, kdiff3, vimdiff 또는 IDE의 내장 도구 포함), 충돌이 발생하면 git mergetool을 실행하세요.

리베이스

git rebase main                                # 현재 브랜치를 main에 리베이스
git rebase -i HEAD~3                           # 마지막 3개 커밋 대화형 리베이스
git rebase --continue                          # 충돌 해결 후 계속
git rebase --abort                             # 진행 중인 리베이스 취소
git rebase --skip                              # 리베이스 중 현재 커밋 건너뛰기

리베이스는 커밋을 새 베이스로 이동하여 히스토리를 다시 작성합니다. 더 깔끔하고 선형적인 히스토리를 만들지만 다른 사람이 사용하는 공개 브랜치에서는 절대 수행해서는 안 됩니다.

원격 작업

원격 저장소는 인터넷이나 네트워크에 호스팅된 프로젝트 버전입니다. 협업과 백업을 가능하게 합니다.

원격 관리

git remote                                     # 원격 연결 목록
git remote -v                                  # URL이 있는 원격 목록
git remote add origin <url>                    # 새 원격 추가
git remote remove origin                       # 원격 제거
git remote rename origin upstream              # 원격 이름 변경
git remote set-url origin <new-url>            # 원격 URL 변경
git remote show origin                         # 자세한 원격 정보 표시

페치 및 풀

git fetch                                      # 원격 변경사항 다운로드
git fetch origin                               # 특정 원격에서 페치
git fetch --all                                # 모든 원격에서 페치
git fetch --prune                              # 삭제된 원격 브랜치 제거
git pull                                       # 원격 변경사항 페치 및 병합
git pull --rebase                              # 병합 대신 페치 및 리베이스
git pull origin main                           # 특정 브랜치 풀

fetchpull의 차이점: fetch는 변경사항을 다운로드하지만 작업 디렉토리를 수정하지 않는 반면, pull은 페치하고 즉시 변경사항을 병합합니다.

변경사항 푸시

git push                                       # 기본 원격/브랜치로 푸시
git push origin main                           # 특정 원격/브랜치로 푸시
git push -u origin feature-login               # 푸시 및 업스트림 추적 설정
git push --all                                 # 모든 브랜치 푸시
git push --tags                                # 모든 태그 푸시
git push --force                               # 강제 푸시 (위험!)
git push --force-with-lease                    # 더 안전한 강제 푸시
<