Git의 설정을 관리한다. 해당 저장소에만 적용되는 local
과 해당 사용자에게 적용되는global
이 있다.
git config --list
git config --l
user.name=이름
user.email=이메일@주소
...
git config --list
를 사용하여 현재 설정된 모든 정보를 확인할 수 있다.
git config user.name
이름
git config <key>
로 특정 key의 값을 확인할 수 있다.
git config --global user.name "이름"
git config --global user.email "이메일@주소"
만약 프로젝트마다 다른 이름과 이메일 주소를 사용하고 싶다면, --local
을 사용하거나 --global
을 제외하면 된다.
git init
현재 디렉토리를 기준으로 새로운 Git 저장소 .git
디렉토리를 생성한다. 새로운 프로젝트를 시작할 때 사용한다.
현재 작업 중인 저장소의 상태를 보여준다.
git status
On branch main
# 스테이징 영역에 추가된 파일
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: example.txt
new file: newfile.txt
# 수정되었으나 스테이징 영역에 추가되지 않은 파일
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
modified: anotherfile.txt
# 추적되지 않는 새로운 파일
Untracked files:
(use "git add <file>..." to include in what will be committed)
untrackedfile.txt
현재 체크아웃되어 있는 브랜치의 이름, 작업 디렉토리 상태, 변경 사항 요약이 표시된다.
스테이징 영역(Staging Area)
커밋할 파일을 임시로 모아두는 공간이다. 작업 디렉토리에서 변경한 파일은 곧바로 커밋되지 않고, 먼저 스테이징 영역에 추가되어
git add
어떤 파일을 커밋할지git commit
관리할 수 있다.
작업 디렉토리에서 수정된 파일을 스테이징 영역에 추가한다.
git add <파일 또는 폴더명>
: 특정 파일을 스테이징 영역에 추가한다.git add -A
, git add -u
, git add .
은 모두 파일을 스테이징하는 방법이지만, 다음과 같은 차이가 있다.명령어 | 수정된 파일 | 삭제된 파일 | 새로 생성된 파일 | 적용 범위 |
---|---|---|---|---|
git add -A | O | O | O | 프로젝트 전체 |
git add -u | O | O | X | 현재 + 하위 디렉토리 |
git add . | O | X | O | 현재 + 하위 디렉토리 |
스테이징 영역에 있는 파일을 커밋하여 저장소에 기록한다. 각 커밋은 고유한 ID(SHA 해시)로 식별된다.
git commit -m "메시지"
: 커밋 메시지와 함께 스테이징 영역의 파일을 커밋한다.git commit -a -m "메시지"
: add와 commit을 한번에 한다.git amend
: 직전의 커밋을 편집할 수 있다. 메시지를 변경하거나 파일 추가가 가능하다. 단, push하기 전에만 가능하다.커밋한 변경 사항을 저장소에 업로드한다.
git push origin main
현재 로컬 브랜치의 변경 사항을 origin
저장소의 main
브랜치에 푸시한다는 뜻이다.
git pull
로 상태를 반영한 후에 push할 수 있다.git fetch
와 git merge
를 함께 수행한다. 원격 저장소의 변경 사항을 가져와 로컬 작업 디렉토리에 병합한다.
git pull origin main
모든 변경 사항이 자동으로 병합되기 때문에, 큰 변경 사항이 있을 때는 git fetch
로 미리 확인하는 게 좋다.
원격 저장소의 변경 사항을 로컬 저장소에 업데이트하지만, 브랜치에 직접적으로 반영하지는 않는다.
다른 개발자들이 업데이트한 변경 사항을 확인하고 싶을 때 사용할 수 있다. 협업 시 충돌을 줄이거나 미리 충돌을 확인하는데 유용하다.
두 브랜치의 변경 사항을 하나의 브랜치에 통합한다. 현재 체크아웃된 브랜치와 다른 브랜치를 병합하는데 사용한다. 변경 사항에 따라 자동 병합이 이루어질 수도 있고, 충돌이 발생하면 수동으로 해결해야 한다.
git fetch
와 함께 사용하여, 원격 브랜치에서 최신 변경 사항을 가져온 후, 로컬 브랜치와 병합한다.
저장소의 커밋 히스토리를 시간순으로 보여준다. 가장 최근 커밋이 위에 나온다. 각 커밋은 커밋 해시, 작성자, 날짜, 커밋 메시지로 표시된다.
git log
: 기본 형태git log -n <숫자>
: 가장 최근 <숫자>개의 커밋만 표시한다.git log --after="2024-01-01" --before="2024-12-31"
: 특정 기간의 커밋만 표시한다.git log --oneline
: 각 커밋을 한 줄로 요약해서 표시한다.git log --graph
: 브랜치와 병합 상황을 시각적인 그래프로 표시한다.git log <파일명>
: 특정 파일의 히스토리만 확인한다.브랜치를 생성, 삭제, 목록을 표시하는데 사용한다.
git branch
: 모든 브랜치 목록을 출력한다. 체크아웃된 브랜치는 *
로 표시된다.
git branch <이름>
: 새 브랜치를 생성한다. 체크아웃하지는 않는다.
git branch -d <이름>
: 브랜치를 삭제한다. 체크아웃된 상태가 아니어야 한다. 변경 사항 때문에 삭제가 거부될 경우, -D
를 사용하면 강제로 삭제할 수 있다.
브랜치를 전환하거나 특정 커밋이나 파일을 체크아웃하는데 사용한다.
git checkout <이름>
: 해당 브랜치로 전환한다.git checkout <commit-hash>
: HEAD 포인터가 해당 커밋으로 이동하게 되며, detached HEAD
상태에 들어가게 된다.detached HEAD
기본적으로 HEAD 포인터는 현재 작업 중인 브랜치를 가리키지만,
HEAD -> branch -> commit
detached HEAD 상태에서는 브랜치가 아닌 특정 커밋을 가리킨다.HEAD -> commit
현재 커밋이 어떤 브랜치에도 속하지 않아 커밋이 사라질 가능성이 있다. detached 상태에서 커밋을 만든 후, 새로운 브랜치를 생성하면 해당 커밋이 그 브랜치에 포함된다.
특정 변경 사항을 취소하거나 HEAD와 브랜치 포인터를 이동시킨다. 로컬에서 작업 중인 변경 사항을 롤백하거나 커밋을 취소할 때 사용된다. 기본 값은 --mixed
이다.
git reset --soft <commit-hash>
: HEAD를 이동하고, 변경 사항은 스테이징 영역과 워킹 디렉토리에 남긴다. 이전 커밋으로 돌아가지만 변경 사항은 유지하고 싶을 때 사용한다.
git reset --mixed <commit-hash>
: HEAD를 이동하고, 스테이징 영역은 비우지만 워킹 디렉토리의 변경 사항은 남아있다. 이전 커밋으로 돌아가고 스테이징을 해제하지만 워킹 디렉토리에서 수정 가능하게 남기고 싶을 때 사용한다.
git reset --hard <commit-hash>
: HEAD를 이동하고, 스테이징 영역과 워킹 디렉토리의 변경 사항을 모두 삭제한다.
커밋을 되돌리기 위해 새로운 커밋을 생성하는 방식이다.
git revert <commit-hash>
GIT의 히스토리를 유지하기 때문에 안전하게 사용할 수 있다. 원격 저장소에 푸시된 커밋을 되돌리고 싶을 때 사용한다.
스테이징된 변경 사항과 워킹 디렉토리의 변경 사항을 임시 저장하고, 작업 디렉토리를 가장 최근 커밋 상태로 복구한다. 다른 브랜치로 전환해야 할 때 코드를 저장하기 위해 사용할 수 있다.
git stash
# 변경 사항을 임시저장한 후 워킹 디렉토리를 초기화한다.
git stash -u
# 추적되지 않은 파일도 임시저장한다.
git stash list
stash@{0}: WIP on main: 123abc Update feature
stash@{1}: WIP on main: 456def Fix bug
...
# 저장된 모든 스태시 항목을 나열한다.
git stash pop
# 가장 최근에 저장된 스태시를 복원하고, 해당 스태시를 삭제한다.
git stash apply
# 최근 스태시를 적용하지만, 삭제하지는 않는다.
git stash apply stash@{1}
# 특정 스태시를 지정하여 복원한다.
git stash drop stash@{0}
# 특정 스태시를 삭제한다.
git stash clear
# 모든 스태시를 삭제한다.