1. Git 설정 (Config)
Git을 처음 설치하면 내가 누구인지 알려줘야 합니다.
커밋에는 작성자의 이름과 이메일이 기록되므로, Git이 이를 알 수 있도록 설정하는 과정이다.
| 전역 사용자명 등록 | git config --global user.name "Your Name" |
| 전역 이메일 등록 | git config --global user.email "you@example.com" |
| 저장소별 사용자명 등록 | git config user.name "Your Name" |
| 저장소별 이메일 등록 | git config user.email "you@example.com" |
| 전역 설정 조회 | git config --global --list |
| 현재 저장소 설정 조회 | git config --list |
| 특정 설정 조회 | git config user.name |
| 기본 브랜치 설정 | git config --global init.defaultBranch main |
2. 저장소 생성
Git은 프로젝트를 관리하기 위해 먼저 Git 저장소(Repository) 를 만들어야 한다.
이미 만들어진 저장소를 내려받거나(clone), 새로운 저장소를 초기화(init)할 때 사용한다.
| Git 저장소 생성 | git init |
| 원격 저장소 복제 | git clone <URL> |
| 특정 브랜치만 Clone | git clone -b <branch> <URL> |
3. 파일 상태 확인
현재 어떤 파일이 수정되었는지, 어떤 파일이 아직 커밋되지 않았는지 확인한다.
| 현재 상태 확인 | git status |
| 변경 내용 확인 | git diff |
| Staging과 비교 | git diff --cached |
| 커밋 간 차이 확인 | git diff commit1 commit2 |
4. Staging Area
수정한 파일 중 어떤 파일을 커밋할지 선택하기 위해 사용한다.
Git에서는 수정했다고 바로 커밋되는 것이 아니라, 먼저 Staging Area에 올린 후 커밋한다.
| 파일 추가 | git add 파일명 |
| 전체 추가 | git add . |
| 수정/삭제 파일만 추가 | git add -u |
| 일부만 추가 | git add -p |
| Stage 취소 | git restore --staged 파일명 |
5. Commit
현재까지의 작업을 하나의 기록(스냅샷)으로 남긴다.
나중에 문제가 생기면 이 기록을 기준으로 돌아가거나 변경 이력을 확인할 수 있다.
| 커밋 | git commit -m "메시지" |
| Stage + Commit | git commit -am "메시지" |
| 마지막 커밋 수정 | git commit --amend |
| 작성자 변경 | git commit --amend --author="이름 <메일>" |
6. 브랜치 (Branch)
새로운 기능을 개발하거나 버그를 수정할 때 메인 코드와 분리된 공간에서 작업하기 위해 사용한다.
| 브랜치 목록 | git branch |
| 원격 브랜치 | git branch -r |
| 전체 브랜치 | git branch -a |
| 브랜치 생성 | git branch feature/login |
| 브랜치 생성 + 이동 | git checkout -b feature/login |
| (권장) 생성 + 이동 | git switch -c feature/login |
| 브랜치 이동 | git checkout 브랜치명 |
| (권장) 이동 | git switch 브랜치명 |
| 브랜치 이름 변경 | git branch -m 새이름 |
| 브랜치 삭제 | git branch -d 브랜치명 |
| 강제 삭제 | git branch -D 브랜치명 |
7. Merge
기능 개발이 끝난 브랜치를 메인 브랜치에 반영하기 위해 사용한다.
| 병합 | git merge 브랜치명 |
| Commit 없이 Merge | git merge --no-commit 브랜치명 |
| Fast Forward 금지 | git merge --no-ff 브랜치명 |
| Squash Merge | git merge --squash 브랜치명 |
| Merge 취소 | git merge --abort |
8. 📜 작업 이력 확인 (Log)
누가 언제 무엇을 수정했는지 확인합니다.
문제 원인을 찾거나 과거 변경 내역을 분석할 때 사용합니다.
| 전체 로그 | git log |
| 한 줄 로그 | git log --oneline |
| 그래프 보기 | git log --graph |
| 그래프 + 한 줄 | git log --oneline --graph |
| 모든 브랜치 | git log --all --graph --oneline |
| 최근 1개 | git log -1 |
| 최근 5개 | git log -5 |
| 변경 내용 포함 | git log -p |
| 작성자별 조회 | git log --author="이름" |
| 날짜별 조회 | git log --since="1 week ago" |
9. 원격 저장소(Remote)
GitHub같은 원격 저장소와 연결하거나 관리하기 위해 사용한다.
| 원격 확인 | git remote -v |
| 원격 추가 | git remote add origin URL |
| 원격 변경 | git remote set-url origin URL |
| 원격 삭제 | git remote remove origin |
10. ☁️ 원격 저장소와 동기화 (Push / Pull / Fetch)
다른 사람들과 협업하기 위해 로컬 저장소와 원격 저장소의 변경사항을 주고받습니다.
- Push: 내 작업을 업로드
- Pull: 다른 사람의 작업을 내려받고 바로 병합
- Fetch: 다른 사람의 작업만 내려받고 병합은 하지 않음
Push
| Push | git push |
| 최초 Push | git push -u origin main |
| 특정 브랜치 Push | git push origin feature/login |
| 강제 Push | git push --force |
| 안전한 강제 Push | git push --force-with-lease |
| 원격 브랜치 삭제 | git push origin --delete 브랜치명 |
Pull / Fetch
| Pull | git pull |
| Fetch | git fetch |
| Fetch 후 현재 브랜치 갱신 | git pull origin main |
| Fetch + Hard Reset | git fetch origingit reset --hard origin/main |
11. ↩️ 이전 상태로 되돌리기 (Reset / Restore / Revert)
실수한 작업을 취소하거나, 특정 시점으로 돌아가기 위해 사용합니다.
세 명령어는 비슷하지만 목적이 다릅니다.
- Reset: 커밋 자체를 이동
- Restore: 파일 변경만 취소
- Revert: 되돌리는 새 커밋 생성
Reset
| Soft Reset | git reset --soft HEAD~1 |
| Mixed Reset (기본) | git reset HEAD~1 |
| Hard Reset | git reset --hard HEAD~1 |
| 특정 커밋으로 이동 | git reset --hard 커밋ID |
Restore
| 파일 복원 | git restore 파일명 |
| Stage 취소 | git restore --staged 파일명 |
| 특정 커밋 파일 복원 | git restore --source=커밋ID 파일명 |
Revert
| 커밋 되돌리기 | git revert 커밋ID |
| 여러 커밋 되돌리기 | git revert A..B |
reset은 커밋 자체를 이동시키는 명령이고, revert는 기존 이력을 유지하면서 되돌리는 새 커밋을 만드는 명령입니다.
12. 🕒 작업 임시 보관 (Stash)
작업 중이지만 아직 커밋하고 싶지 않을 때 변경사항을 잠시 보관한다.
급하게 브랜치를 변경하거나 다른 작업을 해야 할 때 유용하다.
Stash
| 임시 저장 | git stash |
| 목록 보기 | git stash list |
| 적용 | git stash apply |
| 적용 후 삭제 | git stash pop |
| 삭제 | git stash drop |
| 전체 삭제 | git stash clear |
13. 🏷️ 버전 관리 (Tag)
배포한 버전이나 중요한 커밋에 이름표(버전)를 붙인다.
예를 들어 v1.0.0, v1.1.0처럼 릴리스 버전을 관리할 때 사용한다.
| 태그 생성 | git tag v1.0.0 |
| 주석 태그 | git tag -a v1.0.0 -m "Release" |
| 태그 목록 | git tag |
| 태그 Push | git push origin v1.0.0 |
| 모든 태그 Push | git push origin --tags |
14. ✂️ 커밋 선택 및 이력 정리 (Cherry-pick / Rebase)
필요한 커밋만 가져오거나, 커밋 이력을 깔끔하게 정리할 때 사용합니다.
협업이나 코드 리뷰 전 자주 활용됩니다.
Cherry Pick
| 특정 커밋 가져오기 | git cherry-pick 커밋ID |
| Commit 없이 가져오기 | git cherry-pick -n 커밋ID |
| 여러 커밋 가져오기 | git cherry-pick A..B |
Rebase
| Rebase | git rebase main |
| Interactive Rebase | git rebase -i HEAD~3 |
| Rebase 계속 | git rebase --continue |
| Rebase 취소 | git rebase --abort |
15. 🚑 작업 복구 (Reflog)
reset --hard처럼 위험한 작업을 했더라도 이전에 HEAD가 가리키던 위치를 추적하여 복구할 수 있다.
| 모든 HEAD 이동 기록 | git reflog |
| 특정 시점으로 복구 | git reset --hard HEAD@{3} |