Git 배우기

남재상·2025년 1월 29일
post-thumbnail

Git & Github to CodingApple

코딩애플 강의를 통해 배운 Git사용법을 정리한 글입니다.

📅 작성일

2025년 1월 29일


📌 목차

  1. 소개
  2. part1-1 : git 설치법 (윈도우 / 맥북)
  3. part1-2 : git add, commit으로 파일 기록해놓을 수 있음
  4. part1-3 : git add, commit, diff 쉽게 하는 법 (VSCode)
  5. part1-4 : git의 branch 만들기
  6. part1-5 : 다양한 git merge 방법 (3-way, fast-forward, squash, rebase)
  7. part1-6 : 코드짜다가 실수했다 되돌아가자 (git revert, reset, restore)
  8. part1-7 : Github 사용법 1. 내 코드 올릴 땐 git push
  9. part1-8 : Github 사용법 2. 타인과 협업하기 (git clone, pull)
  10. part1-9 : Github 사용법 3. 브랜치로 협업하기 (pull request)
  11. part1-10 : git flow / trunk-based 브랜치 전략
  12. part1-11 : git stash로 코드 잠깐 보관하기
  13. 참고 자료

📝 소개

이전 회사를 다닐 때 SVN을 위주로 사용하다보니 Git, Github를 사용할 일이 많이 없어,
처음 사용해볼 때 막막함이 느껴져 강의를 통해 공부를 하게되었습니다.


🛠️ part1-1 git 설치법 (윈도우 / 맥북)

🔹 Git을 사용하는 이유

  • 파일 변경내역을 보존하고 관리하기 위해 사용

🔹 설치 방법

  1. Git 공식 사이트에서 다운로드
  2. 이미지에 맞게 수정 후 Next
    image

🔹 초기 설정

# Git 계정 설정
git config --global user.email "skawotkd12@naver.com"
git config --global user.name "jsnam"

📂 part1-2 git add, commit으로 파일 기록해놓을 수 있음

🔹 기본 사용법

# git이라는 소프트웨어가 파일생성 및 코드 작성하는걸 감시함
git init

# 파일 스테이징
git add 파일명
git add .  # 모든 파일 스테이징

# 변경사항 커밋
git commit -m '커밋 메시지'

🔹 Staging

  • git add된 파일들이 있는 장소를 staging이라 한다
  • git commit된 파일들이 있는 장소를 repository(저장소) 라고한다

🔹 유용한 명령어

# 상태 확인
git status

# 커밋 이력 조회
git log --all --oneline

🖥️ part1-3 git add, commit, diff 쉽게 하는 법 (VSCode)

🔹 VSCode를 통한 Git 관리

  • 요즘은 에디터에 git기능이 내장되어있어 굳이 명령어를 사용 할 필요는 없다.
  • Source Control 탭을 통해 직관적인 Git 작업 가능
  • 변경사항 시각적 확인 용이

🔹 git diff

  • 파일이 수정되었을 때 어떤내용이 수정되었는지를 보기 위한 명령어
  • 터미널로 보기 때문에 가독성이 많이 떨어지고 버그도 많아서 사용은 잘 안한다.
# 변경사항 확인
git diff

🔹 git difftool

  • git diff대신하여 vim 에디터를 통해서 차이점을 볼 수 있음
  • 사실 비교해주는 에디터들이 있기때문에 잘 사용하지 않는다
# Vim을 통한 차이점 확인
git difftool 커밋ID
git difftool 커밋ID1 커밋ID2

🌿 part1-4 git의 branch 만들기

🔹 branch

  • 프로젝트의 복사본
  • main과 브랜치가 충돌이 나는경우는 직접 비교하면서 수정을 해줘야한다

# 브랜치 생성
git branch 브랜치명

# 브랜치 이동
git switch 브랜치명

# 브랜치 병합
git merge 브랜치명

🔀 part1-5 다양한 git merge 방법 (3-way, fast-forward, squash, rebase)

🔹 Merge 방식

  1. 3-way merge

    • 두 브랜치를 서로 merge할 때 사용하는 방식
    • branch를 만든 시점으로 브랜치 둘다 수정이 됬을 경우 사용된다

  1. Fast-forward merge

    • 한쪽 브랜치만 변경된 경우 사용하는 방식
    • branch를 merge하는것이아닌 main으로 이름을 바꾸어 쭉 이어나가는 방식

# 강제로 3-way merge
git merge --no-ff
  1. Rebase

    • 브랜치의 시작점을 다른 커밋으로 이동
    • 메인 브랜치의 최근 커밋으로 옮긴 후 fast-forward를 사용하는것
    • 브랜치가 많은경우 3-way merge는 나중애 git log출력할 때 복잡하기 때문에 rebase를 사용하여 깔끔하게 로그를 확인할 수 있다
    • 단점은 conflict가 많이 나온다

  1. Squash merge

    • 브랜치에서 커밋했던거를 전부 합쳐서 메인에 붙이는 방식이다
    • 깃 로그를 깔끔하게 보기위해 사용한다

🔹 브랜치 삭제

  • 사실 branch를 merge해도 삭제되지는 않는다
# 병합된 브랜치 삭제
git branch -d 브랜치명

# 강제 삭제
git branch -D 브랜치명

⏮️ part1-6 코드짜다가 실수했다 되돌아가자 (git revert, reset, restore)

🔹 파일 복구 (restore)

# 최근 커밋 상태로 복구
git restore 파일명

# 특정 커밋 시점으로 복구
git restore --source 커밋ID 파일명

# Staging 취소
git restore --staged 파일명

🔹 커밋 취소 (revert)

# 특정 커밋 취소
git revert 커밋ID

# 최근 커밋 취소
git revert HEAD

🔹 커밋 리셋 (reset)

# 완전히 되돌리기
git reset --hard 커밋ID

# 변경사항 스테이징 유지
git reset --soft 커밋ID

# 변경사항 언스테이징
git reset --mixed 커밋ID

🚀 part1-7 Github 사용법 1. 내 코드 올릴 땐 git push

🔹 git repostor

  • git이 파일 기록해두는 장소

🔹 git push

  • 로컬저장소를 원격 저장소로 push해준다
# 코드 푸시
git push -u 저장소주소 main

# -u를 한번 붙인상태로 push를 했다면 다음 push할때는 그냥 git push만 써도된다
git push

🔹 git remote

  • 긴 주소는 변수로 등록이 가능하다
# 원격 저장소 등록
# origin이라는 변수에 주소가 등록됨
git remote add origin 저장소주소

🔹 사용

# 원격 저장소 등록
git remote add origin 저장소주소

# 코드 푸시
git push -u origin main

🔄 part1-8 Github 사용법 2. 타인과 협업하기 (git clone, pull)

🔹 git clone

  • 원격 저장소에 있는 내용들을 가져온다
  • 내가아닌 다른 사람이 push를 하려면 Settings / Collaborators에 추가를 해줘야한다
# 저장소 복제
git clone 저장소주소

🔹 git pull

  • 원격 저장소에 있는 내용들을 가져온다 (원격저장소 최신내용이 로컬저장소에 있을 때만 가능)
# 최신 변경사항 가져오기
git pull origin main

🔹 실행

# 저장소 복제
git clone 저장소주소

# 최신 변경사항 가져오기
git pull origin main

🤝 part1-9 Github 사용법 3. 브랜치로 협업하기 (pull request)

🔹 원격저장소 브랜치

  1. 로컬에서 브랜치 생성 및 작업
  2. 브랜치 푸시
  3. Github에서 Pull Request 생성
  4. 코드 리뷰 후 merge

🌳 part1-10 git flow / trunk-based 브랜치 전략

🔹 Git Flow

  • 안정적인 운영을 할 때 사용한다
  • 최근 continuous delivery 이런거 한 때 유행이었는데 그런거 할 땐 적합하지 않을 수 있다

🔹 Git Flow 활용순서

  1. main브랜치와 dev브랜치(개발용)를 생성
  2. feature브랜치를 생성 (dev에 기능추가)
  3. feature브랜치에서 만든게 잘 되면 dev에 merge
  4. 배포를 하는 경우 dev의 release브랜치를 따로 생성 후 여러가지 테스트를 해본다
  5. 완성이 된다면 main과 dev에 merge시킨다
  6. 만약 배포 후 버그가 생긴다면 메인에서 hotfix를 하나 만들어 바로바로 수정을 한 뒤 main, dev에 머지시킨다

🔹 Trunk-based

  • 코드를 한 브랜치에서만 관리하는 방식
  • 기능을 추가하는 경우 main에서 브랜치를 하나 생성해서 수정 후 머지시키는 방식
  • main 브랜치에 있는 코드가 뻑이나면 큰일나기 때문에 테스트나 코드리뷰를 자주해야한다

🔹 어떤걸 사용해야할까

  • 뼈대가 잡혀있지 않고 개발진행중인건 GitFlow, 뼈대가 잡히고 유지보수를 하는건 Trunk-based

📦 part1-11 git stash로 코드 잠깐 보관하기

🔹 Stash

  • 수정했던 코드들을 잠시 다른곳에 보관하고 싶을 때 사용한다

🔹 Stash 명령어

# 변경사항 임시 저장
git stash
git stash save "메모"

# Stash 목록 확인
git stash list

# 보관했던 코드들을 전부 가져옴 (다만 가장 최근에 보관한것 순으로 가져온다)
git stash pop

# Stash 삭제
git stash drop stash@{n}

# 모든 stash삭제
git stash clear

📚 참고 자료

profile
작은 코드 하나에도 책임을 담는 개발자입니다!

0개의 댓글