99

최근 30분간 동시 방문자 수를 표시합니다. (~)

최고 동시 방문자 수 -
어제: 0명 / 오늘: 0명

Git 핵심 명령어 모음

Git 핵심 명령어 모음

버전 관리 시스템(VCS) Git에서 주로 사용하는 명령을 빠르게 정리합니다.

# 구성 (Config)

구성(Config)은 운영체제 단위의 Git 환경 설정입니다.
개행 문자(Newline) 구성은 Windows와 Unix 계열 운영체제(macOS) 간의 줄바굼 호환성 문제를 방지하기 위한 설정입니다.
이름과 이메일은 버전 생성 시 작성자 정보를 표시하기 위함으로, GitHub 등의 서비스 사용자 정보와 달라도 무방하나 되도록 같게 작성하는 것이 좋습니다.

명령 설명
git -v Git 버전 확인
git config --global core.autocrlf input 개행 문자 설정 (macOS)
git config --global core.autocrlf true 개행 문자 설정 (Windows)
git config --global user.name '<이름>' 사용자 이름 설정
git config --global user.email '<이메일>' 사용자 이메일 설정
git config --global init.defaultBranch main Git v2.28 미만인 경우, 메인 브랜치 이름을 main으로 설정
git config --global pull.rebase true pull 명령어 실행 시 리베이스를 기본 동작으로 설정 (선택)
git config --global --list 구성 목록 확인
git config --global --unset <항목이름> 구성 항목 삭제
git config --global --unset-all <항목이름> 중복 구성 항목 삭제
BASH
1
vim ~/.gitconfig
구성 파일을 직접 열어서 수정하는 경우

# 초기화 (Init)

초기화(Init)는 프로젝트 단위로 Git 버전 관리를 시작하는 기능입니다.
원격 별칭(Remote Alias)은 원격 저장소를 지칭하는 이름으로, 단일 원격인 경우 origin을 사용하는 것을 추천합니다.

명령 설명 예시
git init 프로젝트 버전 관리 시작
git remote 원격 저장소 목록 확인
git remote -v 원격 저장소 URL 확인
git remote add <원격별칭> <URL> 원격 저장소 추가 git remote add origin https://github.com/ParkYoungWoong/heropy.git
git clone <URL> 원격 저장소 복제 git clone https://github.com/ParkYoungWoong/heropy.git
rm -rf .git 버전 관리 초기화 (macOS)
rd /s /q .git 버전 관리 초기화 (Windows CMD)
Remove-Item -Recurse -Force .git 버전 관리 초기화 (Windows Powershell)

# 추적 (Track)

추적(Track)은 버전을 관리할 대상(파일)을 지정하는 것을 말합니다.
스테이징(Staging)은 추적 파일을 버전 생성을 위해 준비하는 것을 말합니다.

명령 설명 예시
git status 현재 브랜치의 변경사항 확인
git add <파일> 특정 파일 추적 및 스테이징 git add ./src/main.js
git add . 모든 파일 추적 및 스테이징
git mv <파일A> <파일B> 스테이징된 파일 이름 변경 git mv ./mnin.js ./main.js
git rm -r --cached <파일> 추적 목록에서 제거 (.gitignore 갱신) git rm -r --cached ./src
git clean -fdn 삭제 가능한 추적되지 않은 파일 목록 확인
git clean -fd 추적되지 않은 파일 삭제
git restore --staged <파일> 특정 파일 언스테이징 (v2.23) git restore --staged ./src/main.js
git restore --staged . 모든 파일 언스테이징 (v2.23)

# 버전 생성 (Commit)

버전 생성(Commit)은 현재 작업 내용을 하나의 버전으로 기록(생성)하는 것을 말합니다.

명령 설명
git commit -m '<메시지>' 버전 생성 (따옴표 닫기 전에는 메시지 줄바꿈 가능)
git commit -am '<메시지>' 추적 파일 스테이징 및 버전 생성
git commit > i > 메시지 입력 > esc > :wq Vim 에디터로 메시지 작성 및 버전 생성
git commit --amend 직전 커밋을 현재 커밋으로 덮어쓰기, Empty Commit (이후 강력(-f) 푸시 필요)
git commit --amend -m '<메시지>' 직전 커밋 메시지를 수정 (이후 강력(-f) 푸시 필요)
gut add <누락파일>
git commit --amend --no-edit
직전 커밋에 현재 스테이징된 변경 사항을 추가, 메시지 유지 (이후 강력(-f) 푸시 필요)

# 확인 (Log)

확인(Log)은 생성한 버전 내용이나 내역, 변경 사항, 작업자 등을 확인하는 것을 말합니다.

명령 설명 예시
git log 현재 브랜치의 버전 내역을 확인
git log -<숫자> 숫자만큼만 최신 버전 내역 확인 git log -2
git log --all 모든 브랜치 내역 확인
git log --oneline 간략한 버전 내역 확인
git log --graph 그래프 형태로 버전 내역 확인
git reflog 로컬의 모든 버전 관리 내역 확인
git show 현재 브랜치의 최신 버전 확인
git show <브랜치> 특정 브랜치의 최신 버전 확인 git show dev
git show <해시> 특정 버전 확인 git show 1a2b3c4d
git blame <파일> 특정 파일의 작업자 확인 git blame ./src/main.js
git blame -L <시작>,<종료> <파일> 특정 파일의 시작부터 종료 줄까지 작업자 확인 git blame -L 10,20 ./src/main.js
git blame -L <시작> <파일> 특정 파일의 시작부터 마지막 줄까지 작업자 확인 git blame -L 10 ./src/main.js
git blame -L ,<종료> <파일> 특정 파일의 처음부터 종료 줄까지 작업자 확인 git blame -L ,20 ./src/main.js
git branch --show-current 현재 브랜치 이름 확인 (v2.22)

# 브랜치 (Branch)

브랜치(Branch)는 프로젝트에서 여러 작업을 나눠 병렬로 진행할 수 있는, 버전 관리의 각 분기점을 의미합니다.

명령 설명 예시
git branch 로컬 브랜치 목록 확인
git branch -r 원격 브랜치 목록 확인
git branch -a 로컬 및 원격 브랜치 목록 확인
git branch -vv 로컬 브랜치와 연결된 업스트림(원격 브랜치) 정보 확인
git branch <브랜치> 브랜치 생성 git branch dev
git branch -D <브랜치> 브랜치 삭제 git branch -D dev
git branch -d <브랜치> 병합 완료된 브랜치 삭제 (안전한 삭제) git branch -d dev
git branch -m <브랜치> 현재 브랜치 이름 변경 git branch -m main
git branch -m <이전브랜치> <새브랜치> 특정 브랜치 이름 변경 git branch -m master main
git branch --show-current 현재 브랜치 이름 확인 (v2.22)
git checkout <브랜치> 브랜치 전환 git checkout dev
git checkout -b <브랜치> 브랜치 생성 및 전환 git checkout -b dev
git checkout <해시> 특정 버전 체크아웃 git checkout 1a2b3c4d
git switch <브랜치> 브랜치 전환 (v2.23) git switch dev
git swtich -c <브랜치> 브랜치 생성 및 전환 (v2.23) git switch -c dev

# 밀어내기 (Push)

밀어내기(Push)는 로컬 저장소의 버전 내역을 원격 저장소로 업로드하는 기능입니다.
강제 플래그(--force, -f)는 충돌을 무시하고 원격 저장소를 덮어쓰므로, 확실한 경우에만 사용해야 합니다.

명령 설명 예시
git push <원격별칭> <브랜치> 원격 저장소로 밀어내기 git push origin dev
git push <원격별칭> --all 원격 저장소로 모든 브랜치 밀어내기 git push origin --all
git push <원격별칭> <브랜치> -f 원격 저장소로 강제(Force) 밀어내기 git push origin dev -f
git push <원격별칭> <브랜치> -u 원격 저장소로 밀어내기 후 생략 가능 git push origin dev -u 이후 git push

# 당겨오기 (Pull)

당겨오기(Pull)는 원격 저장소의 버전 내역을 로컬 저장소로 다운로드하는 기능입니다.

명령 설명 예시
git pull <원격별칭> <브랜치> 원격 저장소에서 브랜치 당겨오기 git pull origin dev
git pull --rebase <원격별칭> <브랜치> 원격 저장소의 브랜치로 로컬 브랜치 덮어쓰기 git pull --rebase origin dev

# 가져오기 (Fetch)

가져오기(Fetch)는 원격 저장소의 최신 내역을 로컬의 원격 내역과 동기화하는 기능으로, 로컬 브랜치에는 영향을 주지 않습니다.

명령 설명 예시
git fetch 현재 원격 저장소의 브랜치 목록 가져오기
git fetch <원격별칭> 특정 원격 저장소의 브랜치 목록 가져오기 git fetch origin
git fetch --all 모든 원격 저장소의 브랜치 목록 가져오기
git fetch --prune 원격 저장소에서 브랜치 목록 가져와서 로컬의 원격 브랜치 목록 덮어쓰기

# 비교 (Diff)

비교(Diff)는 두 개의 버전이나 파일 등의 차이를 서로 비교하는 기능입니다.

명령 설명 예시
git diff <파일> 파일의 수정 내용 확인
git diff <파일A> <파일B> A와 B 파일 비교
git diff <브랜치> 특정 브랜치와 현재 브랜치 비교 git diff dev
git diff <브랜치A> <브랜치B> A와 B 브랜치 비교 git diff main dev
git diff <브랜치A>:<파일> <브랜치B>:<파일> A와 B 브랜치의 파일 비교 git diff main:src/main.js dev:src/main.js
git diff <해시> 현재 버전과 특정 버전 비교 git diff 1a2b3c4d
git diff <해시A> <해시B> A와 B 버전 비교 git diff 1a2b3c4d 5e6f7g8h

# 작업 취소 (Rollback)

롤백(Rollback)은 현재 작업 중인 변경 사항을 모두 취소하고 버리는 것을 말합니다.

명령 설명 예시
git checkout HEAD -- <파일> 특정 파일 롤백 git checkout HEAD -- ./src/main.js
git restore <파일> 특정 파일 롤백 (v2.23) git restore ./src/main.js
git restore . 모든 파일 롤백 (v2.23)
git reset --hard HEAD 모든 파일 롤백

# 초기화 (Reset)

초기화(Reset)는 특정 버전으로 이동하고 그 이후 버전 내역을 제거하는 기능입니다.

명령 설명 예시
git reset --hard HEAD~<번호> 번호만큼 이전 버전으로 리셋 git reset --hard HEAD~2
git reset --hard HEAD~1 직전 버전으로 리셋 (1 버전 전으로)
git reset --hard HEAD~ 직전 버전으로 리셋 (1 생략)
git reset --hard <해시> 특정 버전으로 리셋 git reset --hard 1a2b3c4d
git reset --hard HEAD^ 마지막 버전을 삭제
git reset --hard 수정 내용을 버림
git reset --soft 수정 내용을 스테이징
git reset --mixed 수정 내용을 스테이징하지 않음

# 되돌리기 (Revert)

되돌리기(Revert)는 특정 버전을 취소하고 취소한 새로운 버전을 생성하는 기능입니다.

명령 설명 예시
git revert <해시> 특정 버전을 취소하고 새로운 버전 생성 git revert 1a2b3c4d

# 임시 저장 (Stash)

임시 저장(Stash)는 작업 중인 변경사항을 버전으로 생성하지 않고 별도로 저장하는 기능입니다.

명령 설명 예시
git stash list 임시 저장된 작업 목록 확인
git stash 현재 작업을 임시 저장
git stash -a 미추적 파일 포함, 임시 저장
git stash -m '<메시지>' 메시지와 함께 현재 작업을 임시 저장
git stash -am '<메시지>' 미추적 파일 포함, 메시지와 함께 현재 작업을 임시 저장
git stash show <번호> 특정 번호의 임시 저장 내용 보기 git stash show 2
git stash apply 가장 최신의 임시 저장 내용을 현재 브랜치에 적용
git stash apply <번호> 특정 번호의 임시 저장 내용을 현재 브랜치에 적용 git stash apply 2
git stash drop 가장 최신의 임시 저장 내용 삭제
git stash drop <번호> 특정 번호의 임시 저장 내용 삭제 git stash drop 2
git stash pop 가장 최신의 임시 저장을 적용하고 목록에서 삭제
git stash clean 모든 임시 저장 목록 삭제

# 병합 (Merge)

병합(Merge)은 두 개의 브랜치를 하나로 합치는 기능입니다.

명령 설명 예시
git merge <브랜치> 현재 브랜치에 특정 브랜치 병합 git merge dev
git merge --abort 충돌 시, 병합 과정 중단

병합을 통해 두 브랜치의 내용이 달라 충돌(Conflict)이 발생하는 경우, 충돌을 해결하고 다시 커밋해야 합니다.
'현재 변경 사항'은 현재 브랜치(main)의 작업 내용, '수신 변경 사항'은 병합할 브랜치(dev)의 작업 내용을 의미합니다.
충돌 해결 후 수정된 파일을 스태이징(git add)하고 병합 버전을 생성(git commit)해야 합니다.

1
2
3
4
5
<<<<<< HEAD (현재 변경 사항) main / abc ======= dev / xyz >>>>>> dev (수신 변경 사항)

# 재배치 (Rebase)

재배치(Rebase)는 현재 브랜치의 내역을 대상 브랜치의 최신 버전 다음으로 배치(이동)하는 기능입니다.

1
2
3
(main)-- A - B - C \ (dev)----- D - E
재배치 전 (Before)
1
(main)-- A - B - C - D - E
재배치 후 (After)
명령 설명 예시
git rebase <브랜치> 현재 브랜치를 대상 브랜치로 재배치 git rebase main
git rebase --continue 재배치 계속 진행
git rebase --abort 재배치 과정 중단

다음은 dev 브랜치를 main 브랜치로 재배치하는 과정입니다.

  1. git checkout dev: 재배치할 브랜치로 전환.
  2. git rebase main: 현재 브랜치(dev)를 대상 브랜치(main)로 재배치 시작.
  3. 충돌(Conflict) 발생 시 해결.
  4. git add .: 충돌 해결 후 스테이징.
  5. git rebase --continue: 재배치 계속 진행.
  6. 버전 메시지 수정 및 저장(:wq).
  7. 3~6번 과정 반복 및 재배치 완료!

# 선별 적용 (Cherry-pick)

선별 적용(Cherry-pick)은 다른 브랜치의 특정 버전(커밋)을 현재 브랜치에 선택적으로 적용하는 기능입니다.
브랜치 전체를 병합하지 않고, 필요한 버전만 가져올 때 유용합니다.

명령 설명 예시
git cherry-pick <해시> 특정 버전을 현재 브랜치에 적용 git cherry-pick 1a2b3c4d
git cherry-pick <해시A> <해시B> 여러 버전을 현재 브랜치에 적용 git cherry-pick 1a2b3c4d 5e6f7g8h
git cherry-pick <해시A>..<해시B> A 이후부터 B까지의 버전을 적용 (A 미포함) git cherry-pick 1a2b3c4d..5e6f7g8h
git cherry-pick --no-commit <해시> 커밋 없이 변경 사항만 적용 git cherry-pick --no-commit 1a2b3c4d
git cherry-pick --continue 충돌 해결 후 체리픽 계속 진행
git cherry-pick --abort 체리픽 과정 중단

# 별칭 (Alias)

별칭(Alias)은 자주 사용하는 Git 명령을 짧은 이름으로 등록하여 사용하는 기능입니다.

명령 설명 예시
git config --global alias.<별칭> '<명령>' 별칭 등록 git config --global alias.co 'checkout'
git config --global --unset alias.<별칭> 별칭 삭제 git config --global --unset alias.co
git config --global --get-regexp alias 등록된 별칭 목록 확인
BASH
1
2
3
4
5
git config --global alias.co 'checkout' git config --global alias.br 'branch' git config --global alias.ci 'commit' git config --global alias.st 'status' git config --global alias.lg 'log --oneline --graph --all'
자주 사용하는 별칭 등록 예시
BASH
1
2
3
4
5
git co dev # git checkout dev git br -a # git branch -a git ci -m '메시지' # git commit -m '메시지' git st # git status git lg # git log --oneline --graph --all
등록한 별칭 사용 예시

# 태그 (Tag)

태그(Tag)는 특정 버전에 이름을 붙여 표시하는 기능으로, 주로 릴리스 버전을 관리할 때 사용합니다.
경량(Lightweight) 태그는 단순히 이름만 붙이고, 주석(Annotated) 태그는 작성자, 날짜, 메시지 등의 정보를 함께 기록합니다.

명령 설명 예시
git tag 태그 목록 확인
git tag -l '<패턴>' 패턴과 일치하는 태그 목록 확인 git tag -l 'v1.*'
git tag <태그> 경량 태그 생성 git tag v1.0.0
git tag -a <태그> -m '<메시지>' 주석 태그 생성 git tag -a v1.0.0 -m '첫 번째 릴리스'
git tag <태그> <해시> 특정 버전에 태그 생성 git tag v1.0.0 1a2b3c4d
git tag -d <태그> 태그 삭제 git tag -d v1.0.0
git show <태그> 태그 정보 확인 git show v1.0.0
git push <원격별칭> <태그> 특정 태그를 원격에 밀어내기 git push origin v1.0.0
git push <원격별칭> --tags 모든 태그를 원격에 밀어내기 git push origin --tags
git push <원격별칭> --delete <태그> 원격 태그 삭제 git push origin --delete v1.0.0
git checkout <태그> 특정 태그로 체크아웃 git checkout v1.0.0

경량 태그는 특정 버전을 단순히 가리키는 포인터로, 별도의 정보 없이 이름만 생성됩니다.

BASH
1
2
3
4
5
git tag v1.0.0 git show v1.0.0 # commit 1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t # Author: Heropy <thesecon@gmail.com> # Date: Mon Apr 22 09:00:00 2024 +0900
경량(Lightweight) 태그 생성

주석 태그는 태그 자체에 작성자, 날짜, 메시지 등의 메타 정보를 포함하며, 릴리스 태그에는 주석 태그를 권장합니다.

BASH
1
2
3
4
5
6
7
8
9
10
11
git tag -a v1.0.0 -m '첫 번째 릴리스' git show v1.0.0 # tag v1.0.0 # Tagger: Heropy <thesecon@gmail.com> # Date: Mon Apr 22 09:00:00 2024 +0900 # # 첫 번째 릴리스 # # commit 1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t # Author: Heropy <thesecon@gmail.com> # Date: Mon Apr 22 09:00:00 2024 +0900
주석(Annotated) 태그 생성

# 서브모듈 (Submodule)

서브모듈(Submodule)은 하나의 Git 저장소 안에 다른 Git 저장소를 하위 디렉토리로 포함하여 관리하는 기능입니다.
공통 라이브러리나 외부 프로젝트를 독립적인 버전 관리를 유지하면서 참조할 때 유용합니다.

명령 설명 예시
git submodule add <URL> 서브모듈 추가 git submodule add https://github.com/user/lib.git
git submodule add <URL> <경로> 특정 경로에 서브모듈 추가 git submodule add https://github.com/user/lib.git ./libs/lib
git submodule init 서브모듈 초기화 (.gitmodules 정보를 로컬 설정에 등록)
git submodule update 서브모듈을 등록된 버전으로 업데이트
git submodule update --init 초기화 및 업데이트를 한 번에 실행
git submodule update --init --recursive 중첩된 서브모듈까지 초기화 및 업데이트
git submodule update --remote 서브모듈을 원격의 최신 버전으로 업데이트
git submodule status 서브모듈 상태 확인
git submodule foreach '<명령>' 모든 서브모듈에서 명령 실행 git submodule foreach 'git pull origin main'
git clone --recurse-submodules <URL> 서브모듈을 포함하여 저장소 복제 git clone --recurse-submodules https://github.com/user/project.git
git submodule deinit <경로> 서브모듈 등록 해제 git submodule deinit ./libs/lib
git rm <경로> 서브모듈 제거 (등록 해제 후) git rm ./libs/lib

서브모듈이 포함된 저장소를 처음 복제하는 경우, 서브모듈 디렉토리는 비어 있습니다.
git submodule update --init --recursive 명령으로 서브모듈 내용을 가져와야 합니다.

BASH
1
2
3
git clone https://github.com/ParkYoungWoong/hello-submodule.git cd hello-submodule git submodule update --init --recursive
서브모듈이 포함된 저장소를 복제하고 초기화

서브모듈을 완전히 제거하려면, 등록 해제와 파일 삭제를 순서대로 진행합니다.

BASH
1
2
3
4
git submodule deinit ./hello-submodule git rm ./hello-submodule rm -rf .git/modules/hello-submodule git commit -m "서브모듈 제거"
서브모듈 완전 제거

# 워크트리 (Worktree)

워크트리(Worktree)는 하나의 Git 저장소에서 여러 브랜치를 별도의 디렉토리에 동시 체크아웃해서 작업할 수 있는 기능입니다.

git switch 같은 일반적인 브랜치 전환은 하나의 디렉토리에서 브랜치를 바꾸는 방식입니다.
따라서 작업 중이던 변경사항이 있을 때 브랜치를 변경하려면, 변경사항을 임시 저장(Stash)하거나 버전 생성(Commit)을 해야 합니다.
IDE에서 열어둔 파일, 빌드 캐시, 개발 서버 상태도 모두 초기화됩니다.

워크트리를 사용하면 각 브랜치가 독립된 디렉토리에 존재하게 됩니다.
따라서 기존 작업을 중단하지 않고 다른 브랜치에서 바로 작업을 시작할 수 있습니다.

명령 설명 예시
git worktree add <경로> 경로명으로 새 브랜치 생성 및 워크트리 추가 git worktree add ./.worktrees/hotfix/signup-error
git worktree add <경로> -b <브랜치> 다른 이름으로 새 브랜치 생성 및 워크트리 추가 git worktree add ./.worktrees/hotfix/signup-error -b hotfix/new-branch-name
git worktree add <경로> <브랜치> 존재하는 기존 브랜치로 워크트리 추가 git worktree add ./.worktrees/hotfix hotfix/existing-branch-name
git worktree list 모든 워크트리 목록 확인
git worktree remove <경로> 워크트리 제거 git worktree remove ./.worktrees/hotfix/signup-error
git worktree prune 삭제된 디렉토리의 워크트리 정보 정리
git worktree move <경로> <새경로> 워크트리 위치 이동 git worktree move ./.worktrees/feature ./.worktrees/new-feature

워크트리를 프로젝트 내부에 생성하는 경우, .gitignore에 해당 디렉토리를 추가해야 합니다.

main 브랜치에서 개발 중 긴급 버그 수정이 필요한 상황이라면 다음과 같이 워크트리를 활용할 수 있습니다.
프로젝트 루트의 파일은 변경되지 않으므로, IDE 상태나 개발 서버를 유지하면서 긴급 작업을 처리할 수 있습니다.

BASH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# main 브랜치에서 작업 중에 긴근 버그 수정을 위해 워크트리 생성 git worktree add ./.worktrees/hotfix/signup-error # 워크트리 디렉토리로 이동해서 수정 작업 및 버전 생성 cd ./.worktrees/hotfix/signup-error git add . git commit -m "회원가입 버그 수정" # 다시 main 브랜치 디렉토리로 이동해서 병합 cd ../../.. git merge hotfix/signup-error # 워크트리와 브랜치 삭제 git worktree remove ./.worktrees/hotfix/signup-error git branch -d hotfix/signup-error