In수

Music GIF

Github - 2025년12월13일


Github

초기 설정

환경설정

정보 확인하기

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로 확인하기

Local 환경에서 작업

git init

mkdir 디렉터리이름  # 디렉터리 생성
cd 디렉터리이름     # 디렉터리로 이동
git init          # Git 저장소 초기화

git add, git commit

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 checkout

git branch              # 브랜치 목록 확인
git branch -r           # 원격 브랜치 목록 확인
git branch -a           # 모든 브랜치 목록 확인
git branch 브랜치이름     # 새 브랜치 생성
git checkout 브랜치이름   # 브랜치 전환
git switch 브랜치이름     # 브랜치 전환 (최신 방식)
git branch -d 브랜치이름  # 브랜치 삭제
git branch -D 브랜치이름  # 브랜치 강제 삭제

git merge

git checkout master         # 메인 브랜치로 전환
git merge 브랜치이름         # 브랜치 병합
git merge 브랜치이름 --no-ff # fast-forward를 방지하고 병합 커밋 생성

git log

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"

.gitignore

특정 파일이나 디렉터리를 Git에서 추적하지 않도록 설정

touch .gitignore  # .gitignore 빈 파일 생성

참고 사이트

원격 저장소 연동

깃허브 저장소 생성 및 Clone

저장소 생성 단계:

  1. 깃허브 접속
  2. Create repository → Public 선택, License: MIT 선택
  3. 주소 복사 후 Git Bash에서 다음 명령어 입력:
git clone "저장소 주소"  # 원격 저장소 복제

원격 저장소 추가 및 연동

git remote                              # 원격 저장소 확인 (origin)
git remote -v                           # 연결된 원격 저장소 상세 확인
git remote add origin 원격저장소URL      # 로컬 저장소를 원격 저장소와 연결

Push & Pull

로컬 커밋을 원격 저장소에 업로드

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한 내용 병합

GitHub Personal Access Token

비밀 키 받기:

  1. 오른쪽 맨 위 프로필 아이콘 클릭 → Settings 클릭
  2. 왼쪽 사이드 바에서 Developer Settings 클릭
  3. Personal access tokens → Tokens (Classic) 클릭
  4. Generate new token → Generate new token (classic) 선택

Git 고급 기능

stash

작업 중인 변경사항을 임시로 저장

git stash              # 현재 변경사항 임시 저장
git stash list         # stash 목록 보기
git stash pop          # 가장 최근 stash 불러오기
git stash pop stash@{번호}  # 특정 stash 불러오기

undo & restore

변경사항 취소하기

git restore 파일명.파일확장자  # 파일을 최종 커밋 상태로 되돌리기
git checkout HEAD -- 파일명    # 파일을 마지막 커밋 상태로 되돌림

Unstaging

Stage의 변경사항을 Working Directory로 내리기

git add 파일명.파일확장자
git reset HEAD 파일명.파일확장자  # HEAD: 마지막의, 최신의

커밋 수정하기 (amend)

최근 커밋 메시지 수정하기

git commit --amend                # 에디터에서 메시지 수정
git commit --amend -m "새 메시지"  # 인라인으로 메시지 수정

같은 브랜치 상에 있는 최종 커밋을 취소하고 새로운 내용을 추가하거나 설명을 덧붙인 커밋을 할 수 있습니다.

Revert commit

잘못을 인정하고 특정 시점으로 되돌리기 (이미 push된 커밋을 안전하게 취소)

git revert --no-commit HEAD~되돌리고싶은커밋숫자..
git status    # 삭제 이력 확인
git commit    # 왜 revert했는지 이유를 적어야 함

또는

git revert 커밋해시  # 특정 커밋을 취소하는 새로운 커밋 생성

Reset

어떤 특정 커밋을 사용하지 않게 되어 다시 되돌릴 때 사용
git revert와 다르게 커밋 기록이 남지 않습니다.

git reset 모드:

모드 의미 HEAD 위치 인덱스 작업 디렉터리
hard 완전히 되돌림 변경 변경 변경
mixed 인덱스의 상태를 되돌림 (기본값) 변경 변경 유지
soft 커밋만 되돌림 변경 유지 유지

git reset 옵션:

옵션 의미
^ 혹은 ~ ~은 커밋 내역 하나를 의미. 표시한 수만큼 커밋을 되돌림
ORIG_HEAD git reset 명령으로 지운 커밋 내역을 보관. 이를 통해 reset한 커밋을 되돌릴 수 있음

git rebase

브랜치 이력을 정리하고 깔끔하게 병합

기본 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 Conflict 해결

1. 일반적인 상황 (Merge)

Merge 상황에서 충돌 해결

2. 특수한 상황 (Rebase)

rebase 방법으로 충돌 해결

Branch Models

git flow

  • 가장 전통적이고 많이 쓰이는 모델
  • 각 단계가 명확히 구분되어 배포 주기가 주기적인 서비스에 유리
  • 단점: 복잡함

github flow

  • 브랜치 모델의 단순화
  • CI 의존성이 높고, pull request가 없으면 실수에 대처가 힘듦

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

gitlab flow

Deploy, issue에 대응하기 쉽도록 한 모델

GitHub 협업 도구

pre-commit

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

Issue

GitHub 프로젝트의 다양한 이슈를 관리하기 위한 기능

  • 용도: 할 일, 버그, 질문 등을 관리
  • 중요: Label, 상태 관리 등의 업데이트가 잘 이루어져야 원활한 작업 가능
  • Template: GitHub repository → Settings → Issue template에서 설정
  • Issue Labels: 상태와 종류, 긴급도 등을 표시 (참고)
  • Milestone: Issue가 프로젝트의 어떤 주기에서 해결되어야 하는지 표기. Sprint의 달성률과 남은 Issue 파악이 쉬워짐

Projects

GitHub에서 repository issue 기반의 task management

  • Scrum board와 table 방식 존재
  • 팀의 Admin만 관리 가능
  • commit, pull request 등을 통해 자동으로 움직이도록 관리 가능

Wiki

Repository에서 README.md보다 더 자세한 설명이 필요할 때 작성

  • 별도 사이트 없이도 FAQ, Docs 처리 가능
  • 프로젝트 중 문서화가 필요한 모든 것들을 담아놓는 공간
  • 포함 내용: Daily Scrum, Sprint Retrospection (Liked, Learned, Lacked), Code Convention, Technical Issues

Pull Request

명령어 지원:

  • close, resolve, fix (복수형, 과거형)
  • 예: resolve #1

팀 프로젝트 협업

팀 Project REMOTE 과정 (main branch에서 실행)

git 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

유용한 리소스

  1. GitHub Repository 생성 사이트
    gh-profile-readme-generator

  2. gitignore 파일 만들기
  3. GitHub에서 Jupyter Notebook 변경사항 보기
    오른쪽 위 프로필 사진 클릭 → Feature preview → Rich Jupyter Notebook Diffs 활성화

Git 사용 시 주의사항

습관들이면 안 되는 것들

# ❌ git add .
# 현재 디렉토리 하위의 모든 파일을 staging할 때 사용
# 문제: 현재 commit 단위에 들어가면 안 되는 파일까지 휩쓸릴 수 있음

# ❌ git commit -m "Message"
# 셸에서 바로 메시지를 쓰면서 커밋
# 문제: revert commit, merge commit 등의 상황에서 메시지를 덮어쓸 우려

# ❌ 저장소 안에 저장소 clone 하기
# 프로젝트 단위는 항상 독립적으로 존재해야 함

# ❌ 의미없는 commit message 남기기 (예: a, 1, ..)
# commit message는 제목만으로 해당 작업 단위에 대한 설명이 가능해야 함

반드시 지켜야 할 것

  • Conventional Commit 잘 지키기!
  • 의미 있는 commit 단위로 작업하기
  • 커밋 메시지는 명확하고 구체적으로 작성하기

실습 과제

직접 프로젝트를 생성하고 협업하는 과정을 처음부터 끝까지 해보기!