Git | GitHub

Git 기본 작업 동작 모음

powergirl 2025. 9. 18. 16:43
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