Git 기본 워크플로우 (순서대로) - git init
저장소 초기화
git init
현재 폴더를 Git 저장소로 만든다 (.git 폴더 생성됨).
현재 상태 확인
git status
어떤 파일이 추적되는지, 어떤 파일이 변경되었는지 확인.
파일을 스테이징 영역에 추가 - 1) 모든 파일
git add .
현재 폴더의 모든 파일을 스테이징 영역에 올림.
파일을 스테이징 영역에 추가 - 2) 특정 파일
git add 파일명
첫 커밋 만들기
git commit -m "First commit"
스테이징된 파일들을 저장소에 기록
원격 저장소 연결 (예: GitHub)
git remote add origin https://github.com/사용자명/저장소명.git
로컬 Git과 GitHub 저장소를 연결
브랜치 이름 확인 및 변경 (필요 시)
git branch -M main
원격 저장소로 푸시 (업로드)
git push -u origin main
로컬 커밋을 GitHub main 브랜치에 업로드
이후 작업할 때 (반복 루틴) - git status
상태 확인
git status
어떤 파일이 수정되었는지 확인
예:
modified: file1.cpp
수정한 파일 스테이징 - 해당 파일만
git add file1.cpp
수정한 파일 스테이징 - 전체 파일
git add .
커밋 생성
git commit -m "수정 내용 간단히 작성"
원격 저장소에 푸시 (GitHub 사용 시)\
git push
이전에 git push -u origin main 했으면 이후엔 git push 만으로도 업로드 가능
기본 로그 확인 - git log
git log
저장소에 있는 커밋 내역을 최근 순으로 보여줌
표시 내용:
commit <커밋 해시>
Author: 작성자 이름 <이메일>
Date: 날짜
커밋 메시지
특정 파일만 로그 보기
git log -- file.cpp
특정 커밋이나 브랜치로 이동 - git checkout 브랜치명
브랜치 이동
git checkout main
현재 작업 중인 브랜치를 main으로 이동
브랜치 변경 시 작업 디렉토리가 해당 브랜치 상태로 바뀜
커밋 단위로 이동
git checkout 커밋해시
예:
git checkout a1b2c3d
해당 커밋 시점으로 임시 이동 (detached HEAD 상태)
주의: 이 상태에서 수정 후 커밋하면 기존 브랜치와 연결되지 않음
새 브랜치 생성하면서 이동
git checkout -b 새브랜치명
예:
git checkout -b feature/login
feature/login 브랜치를 만들고 바로 이동
개발하다가 나중에 메인 브랜치에 합치기 편함
브랜치 생성 후 작업 흐름
파일 수정 후 상태 확인
git status
변경된 파일 스테이징
git add .
커밋 생성
git commit -m "Add login feature"
새 브랜치 원격 저장소로 푸시
git push -u origin feature/login
-u 옵션은 로컬 브랜치와 원격 브랜치를 연결해줌
이후부터는 단순히 git push 만 입력해도 됨
현재 브랜치에 병합 - git pull origin main
git pull origin main
origin >> 원격 저장소 이름 (기본은 origin)
main >> 원격 브랜치 이름
GitHub 저장소 전체를 받아오기 - git clone
GitHub URL 복사
예:
https://github.com/username/repository.git
원하는 경로로 이동
cd ~/Documents
받기 - 폴더 없이 바로 받기
git clone https://github.com/username/repository.git .
받기 - 폴더 생성하고 이름 바꿔서 받기
git clone https://github.com/username/repository.git 새폴더이름
.gitignore
.gitignore.txt
예시:
# 빌드 산출물
*.o
*.out
*.exe
# 라이브러리
*.so
*.dll
# 빌드 폴더
build/
# IDE 설정
.vscode/
.idea/
# 로그
*.log
이미 트래킹된 파일을 .gitignore에 추가했을 때 - 기존에 올린 파일 추적 끊기
git rm --cached 파일명
git commit -m "Stop tracking 파일명"
.gitignore은 새로 추가될 파일만 무시
이미 Git이 추적하고 있는 파일은 .gitignore에 추가해도 계속 추적됩니다.
확인 - 어떤 파일이 무시되는지 확인:
git status --ignored
파일/폴더 삭제 관리 - git rm
로컬에서도 삭제 + Git에도 반영
git rm 파일명
git commit -m "Remove file"
폴더 삭제
git rm -r 폴더명
git commit -m "Remove folder"
로컬 파일은 유지하되 Git에서만 제거
git rm --cached 파일명
git commit -m "Stop tracking 파일명"
강제 삭제(예: 수정된 파일 강제 제거)
git rm -f 파일명
파일 이름 변경/이동 - mv
git mv oldname.cpp newname.cpp
git commit -m "Rename file"
변경 내용 비교 - git diff
워킹 디렉토리 <<>> 스테이징 비교
git diff
커밋 간 비교
git diff commitA..commitB
브랜치 간 비교
git diff main..feature/login
통계 요약
git diff --stat
최근 커밋의 패치(한 커밋 보기)
git show <커밋해시>
최근 커밋 수정 - git commit --amend
마지막 커밋 메시지/내용을 수정 - 파일 수정
git add <파일>
마지막 커밋 메시지/내용을 수정 - 커밋 수정
git commit --amend -m "새 커밋 메시지"
임시 저장 - git stash
스태시는 로컬 전용(원격으로 푸시되지 않음). 협업용으로는 커밋/브랜치 권장.
작업 중이지만 커밋하기엔 애매할 때 임시로 저장
git stash # 변경사항 저장(스테이징 포함)
git stash push -m "WIP: login form" # 메시지 붙여서 저장 (권장)
스태시 목록 보기
git stash list
스태시 내용 보기
git stash show -p stash@{0}
스태시 적용
git stash apply # 가장 최근 스태시 적용(삭제는 안 함)
git stash pop # 적용 후 스태시 목록에서 제거
git stash apply stash@{2} # 특정 스태시 적용
스태시로 새 브랜치 만들기
git stash branch feature/wip stash@{0}
untracked 파일 포함 저장
git stash push -u -m "include untracked"
스태시 삭제/전체삭제
git stash drop stash@{0}
git stash clear
브랜치 병합 - git merge 합칠 브랜치 이름
기능 브랜치(feature/...) 작업 완료 후 main에 합치기
git switch main
git merge feature/login
병합 성공 시 자동으로 merge commit 생성(또는 fast-forward).
충돌을 현재 브랜치(HEAD) 버전으로 채택
git checkout --ours 파일명
git add 파일명
충돌을 상대(branch) 버전으로 채택
git checkout --theirs 파일명
git add 파일명
모든 충돌을 상대 버전으로 자동 선택(주의해서 사용)
# 일반적으로 권장하지 않음 — 상황에 따라 다름
git merge -X theirs feature/login
'Git | GitHub' 카테고리의 다른 글
| 시나리오3 - 로컬 작업하던거 무시하고 깃헙(마지막 커밋)으로 되돌리기(checkout) (0) | 2025.11.06 |
|---|---|
| 시나리오2 - 생성된 레퍼지토리를 로컬에서 관리하기(clone) (0) | 2025.10.20 |
| SSH 키 삭제, 생성, 설정 (0) | 2025.09.30 |
| 시나리오1 - 로컬에서 작성한 파일 깃헙에 올리기(remote) (0) | 2025.09.30 |
| 깃 유저네임, 이메일 등록, 버전 확인, 기본 브랜치 이름 변경 (0) | 2025.09.18 |