정보 확인하기
git config --list
이름과 이메일 설정
git config --global user.name "사용자이름"
git config --global user.email "이메일주소"
git config --global core.editor "vim"
git config --global core.pager "cat"
Tip
만약 core.editor 값이 vim, notepad 두 개가 있을 경우:
vi ~/.gitconfig
위 명령어 입력 후 notepad 부분을 지우고 저장 후 다시 git config --list로 확인하기
mkdir 디렉터리이름 # 디렉터리 생성
cd 디렉터리이름 # 디렉터리로 이동
git init # Git 저장소 초기화
vim 파일이름 # 파일 생성 및 편집 [ i : 입력모드, esc : 명령모드, :wq! : 저장 후 종료 ]
cat 파일이름 # 파일 내용 확인
git status # 현재 상태 확인 (자주 확인해주는 것이 좋다)
커밋하기
# 방법 1: 스테이징 + 커밋 분리
git add 파일명.확장자 # 특정 파일 스테이징
git add . # 모든 변경사항 스테이징
git commit # 에디터에서 커밋 메시지 작성
git commit -m "커밋 메시지" # 인라인으로 커밋 메시지 작성
# 방법 2: 수정된 파일 자동 스테이징 + 커밋
git commit -am "커밋 메시지"
# 방법 3: 메시지 없이 (에디터에서 입력)
git commit -a
git branch # 브랜치 목록 확인
git branch -r # 원격 브랜치 목록 확인
git branch -a # 모든 브랜치 목록 확인
git branch 브랜치이름 # 새 브랜치 생성
git checkout 브랜치이름 # 브랜치 전환
git switch 브랜치이름 # 브랜치 전환 (최신 방식)
git branch -d 브랜치이름 # 브랜치 삭제
git branch -D 브랜치이름 # 브랜치 강제 삭제
git checkout master # 메인 브랜치로 전환
git merge 브랜치이름 # 브랜치 병합
git merge 브랜치이름 --no-ff # fast-forward를 방지하고 병합 커밋 생성
git log # 커밋 로그 확인
git log --oneline # 한 줄 요약 로그 확인
git log --graph # 그래프 형태로 로그 확인
git log -1 --stat # 가장 최근 커밋 로그 확인
보기 좋은 로그 출력 설정
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
특정 파일이나 디렉터리를 Git에서 추적하지 않도록 설정
touch .gitignore # .gitignore 빈 파일 생성
참고 사이트
저장소 생성 단계:
git clone "저장소 주소" # 원격 저장소 복제
git remote # 원격 저장소 확인 (origin)
git remote -v # 연결된 원격 저장소 상세 확인
git remote add origin 원격저장소URL # 로컬 저장소를 원격 저장소와 연결
로컬 커밋을 원격 저장소에 업로드
git push origin main # origin의 main 브랜치로 업로드
git push origin --all # 모든 브랜치를 원격 저장소에 업로드
git push -u origin feature/이름 # 새로운 브랜치 최초 push (-u는 한 번만 사용)
원격 저장소의 변경 사항 가져오기
git fetch origin # 원격 저장소의 변경 사항을 로컬로 가져오기
git pull origin main # 원격 저장소의 main 브랜치 변경 사항을 가져오고 병합
git merge FETCH_HEAD # fetch한 내용 병합
비밀 키 받기:
작업 중인 변경사항을 임시로 저장
git stash # 현재 변경사항 임시 저장
git stash list # stash 목록 보기
git stash pop # 가장 최근 stash 불러오기
git stash pop stash@{번호} # 특정 stash 불러오기
변경사항 취소하기
git restore 파일명.파일확장자 # 파일을 최종 커밋 상태로 되돌리기
git checkout HEAD -- 파일명 # 파일을 마지막 커밋 상태로 되돌림
Stage의 변경사항을 Working Directory로 내리기
git add 파일명.파일확장자
git reset HEAD 파일명.파일확장자 # HEAD: 마지막의, 최신의
최근 커밋 메시지 수정하기
git commit --amend # 에디터에서 메시지 수정
git commit --amend -m "새 메시지" # 인라인으로 메시지 수정
같은 브랜치 상에 있는 최종 커밋을 취소하고 새로운 내용을 추가하거나 설명을 덧붙인 커밋을 할 수 있습니다.
잘못을 인정하고 특정 시점으로 되돌리기 (이미 push된 커밋을 안전하게 취소)
git revert --no-commit HEAD~되돌리고싶은커밋숫자..
git status # 삭제 이력 확인
git commit # 왜 revert했는지 이유를 적어야 함
또는
git revert 커밋해시 # 특정 커밋을 취소하는 새로운 커밋 생성
어떤 특정 커밋을 사용하지 않게 되어 다시 되돌릴 때 사용
git revert와 다르게 커밋 기록이 남지 않습니다.
git reset 모드:
| 모드 | 의미 | HEAD 위치 | 인덱스 | 작업 디렉터리 |
|---|---|---|---|---|
| hard | 완전히 되돌림 | 변경 | 변경 | 변경 |
| mixed | 인덱스의 상태를 되돌림 (기본값) | 변경 | 변경 | 유지 |
| soft | 커밋만 되돌림 | 변경 | 유지 | 유지 |
git reset 옵션:
| 옵션 | 의미 |
|---|---|
| ^ 혹은 ~ | ~은 커밋 내역 하나를 의미. 표시한 수만큼 커밋을 되돌림 |
| ORIG_HEAD | git reset 명령으로 지운 커밋 내역을 보관. 이를 통해 reset한 커밋을 되돌릴 수 있음 |
브랜치 이력을 정리하고 깔끔하게 병합
기본 rebase:
git checkout hotfix1
git rebase master # master를 기준으로 hotfix1을 재배치
# 충돌 발생 시:
# 1. 충돌 해결
# 2. git add 파일명
# 3. git rebase --continue
git checkout master
git merge hotfix1 --no-ff # master로 병합
rebase 옵션:
| 옵션 | 의미 |
|---|---|
| –continue | 충돌이 해결된 후 rebase를 계속 진행 |
| –abort | rebase를 중단하고 이전 상태로 되돌림 |
| –skip | 충돌이 발생한 커밋을 건너뛰고 rebase를 계속 진행 |
인터랙티브 rebase (커밋 합치기):
git rebase -i HEAD~~ # 서로 다른 두 개의 커밋 내역을 합침 (~ : 커밋 내역 하나)
Merge 상황에서 충돌 해결
rebase 방법으로 충돌 해결
GitHub Flow 작업 순서:
# 1. 새 브랜치 생성 및 전환
git branch feature/기능이름
git switch feature/기능이름
# 2. 작업 및 커밋
vi 파일명.확장자 # main branch와 다르게 수정
git add 파일명.확장자
git commit
# 3. 원격에 push
git push -u origin feature/기능이름 # -u는 한 번만
# 4. GitHub에서 Pull Request 생성
# - Pull requests → Create pull request
# - feature/기능이름 선택
# - Title, description 작성 + Assignees(담당자) 선택
# - Create pull request → Merge pull request → Confirm merge
# 5. 브랜치 삭제 (GitHub 웹에서)
# - main 클릭 → View all branches → feature/기능이름 삭제
# 6. 로컬 브랜치 삭제
git branch -D feature/기능이름
# 7. 최종 데이터 pull
git pull origin main
Deploy, issue에 대응하기 쉽도록 한 모델
commit 수행 전 체크해야 할 것들을 자동 수행하도록 도와주는 도구
설치 및 설정:
pip install pre-commit # 설치
pre-commit --version # 설치 확인
pre-commit sample-config > .pre-commit-config.yaml # 설정 파일 생성
cat .pre-commit-config.yaml # 내용 보기
사용 방법 (commit 하기 전):
pre-commit run # 스테이징된 파일 체크
pre-commit run -a # 모든 파일 체크 (주로 사용)
참고 사이트: pre-commit.com
GitHub 프로젝트의 다양한 이슈를 관리하기 위한 기능
GitHub에서 repository issue 기반의 task management
Repository에서 README.md보다 더 자세한 설명이 필요할 때 작성
명령어 지원:
close, resolve, fix (복수형, 과거형)resolve #1git remote -v # remote 확인
git remote add upstream 팀리포지토리주소 # 관습적으로 팀 이름은 upstream
git fetch upstream main # FETCH_HEAD 공간에 쌓임
git merge FETCH_HEAD
git push origin main
Conventional Commits 지키기!
참고 사이트: conventionalcommits.org
GitHub Repository 생성 사이트
gh-profile-readme-generator
# ❌ git add .
# 현재 디렉토리 하위의 모든 파일을 staging할 때 사용
# 문제: 현재 commit 단위에 들어가면 안 되는 파일까지 휩쓸릴 수 있음
# ❌ git commit -m "Message"
# 셸에서 바로 메시지를 쓰면서 커밋
# 문제: revert commit, merge commit 등의 상황에서 메시지를 덮어쓸 우려
# ❌ 저장소 안에 저장소 clone 하기
# 프로젝트 단위는 항상 독립적으로 존재해야 함
# ❌ 의미없는 commit message 남기기 (예: a, 1, ..)
# commit message는 제목만으로 해당 작업 단위에 대한 설명이 가능해야 함
직접 프로젝트를 생성하고 협업하는 과정을 처음부터 끝까지 해보기!