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
충돌을 해결하려면:
- 충돌하는 파일을 열고 편집하여 충돌 해결
- 충돌 마커 제거 (
<<<<<<<,=======,>>>>>>>) git add로 해결된 파일 스테이징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 # 특정 브랜치 풀
fetch와 pull의 차이점: 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 # 더 안전한 강제 푸시
<