Git & GitHub

[Git & GitHub_1-2] 깃 기초(브랜치, 커밋, 푸시 등)

dogfeet 2024. 10. 5. 20:06

 용어

  • git
    : 형상 관리 시스템의 한 종류로 코드 파일을 저장, 공유, 기록할 수 있어 이전 버전의 파일로 다시 되돌릴 수 있음
  • Staging(add)
    : Commit하기 전에 파일을 묶는 것
  • Commit
    : Staging Area에 있는 파일을 Repository에 저장하는 것, 변경된 사항을 기록하여 저장함. 내 로컬에 최종 저장됨.
  • Push
    : 원격 저장소(gitHub)에 업로드하여 최종 저장
  • Fetch
    : 로컬에는 없는 원격 저장소에 저장되어 있는 데이터를 모두 가져옴. 상태를 최신으로 업데이트 한다고 생각하면 쉬움.
  • Pull
    : 원격 저장소의 데이터를 가져오고 현재 작업하는 로컬 브랜치와 머지하는 것. Fetch+Merge
  • Merge
    : 브랜치 병합. 가지라는 의미로 브랜치를 만들어서 작업하다가 원래의 브랜치에 다시 합쳐주는 것.
  • Checkout
    : 브랜치 전환. 프로젝트 기록의 특정 시점으로 리포지토리 상태를 업데이트 하는 것.
  • Branch
    : 하나의 프로젝트에 대한 여러 버전을 만들어 둔 것
  • Project 와 Repository 의 차이
    : 프로젝트는 코드를 사용해 목표를 달성하기 위한 작업의 집합이고, 저장소는 코드의 버전을 관리하는 공간임

 

 깃 상태

  • Modified
    : 수정한 파일이 로컬 데이터베이스에 커밋되지 않은 상태
  • Staged
    : 현재 수정한 파일을 곧 커밋할 상태
  • Commited
    : 파일이 로컬 데이트베이스에 저장된 상태

 

 깃 영역

  • Working Directoryd
    : 작업하는 공간
  • Staging Area
    : 커밋하기 위한 파일을 올려 놓은 공간
  • Repository
    : 커밋한 파일이 모여 있는 공간(저장소)

 

 파일 상태

  • Unmodified
    : 기존에 커밋했던 파일을 수정하지 않은 상태
  • Modified
    : 기존에 커밋했던 파일을 수정한 상태
  • Staged
    : 커밋 가능한 상태
  • Untracked
    : 관리 대상이 아닌 파일, Unmodified 상태에서 파일을 제거하면 이 상태가 됨

 

 Git 설정 (커밋할 때 사용하는 정보를 수정해야 됨)

  • Git Bash에서 사용자 정보를 수정하는 명령어들 입력
    git config --global user.name "abc"
    git config --global user.email "abc@naver.com"
  • 사용할 기본 브랜치명 입력(주로 기본 브랜치는 main 또는 master를 입력함)
    git config --global init.defaultBranch "main"
  • 제대로 설정했는지 확인하는 명령어
    git config --list
  • 개별로 제대로 설정했는지 확인하려면, 예를 들어 유저 이름이 제대로 입력 되었는지 확인하려면 아래 명령어 입력
    git config --global user.name

 

 

 Commit, Push 하는 법

 GUI 로 커밋 및 푸시

  1. 좌측 '커밋' 메뉴에서 파일 선택 후 커밋하기
  2. 상단 '깃' 메뉴에서 'Push'를 통해 푸시하기
  3. 내 깃허브 사이트 들어가서 새로고침하면 푸시한 내용 뜨는 거 확인할 수 있음

 

▷ 인텔리제이 터미널로 커밋 및 푸시

※ 기타 자세한 내용과 커밋 및 푸시 과정 중 오류가 발생한다면 스크롤 내려서 "인텔리제이 터미널 명령어" 부분 참고

  1. 풀 받을 게 있다면 풀 받기(로컬 저장소와 원격 저장소의 파일이 다를 수도 있기 때문, origin은 리모트 저장소 이름, master 또는 main)
    : git pull origin master
  2. 스테이지에 올리기(커밋을 하기 위한 준비 단계)
    : git add *
  3. 커밋해서 내 로컬 저장소에 올리기
    : git commit -m "커밋 메시지"
  4. 푸시해서 원격 저장소(깃허브)에 올리기
    : git push origin master
  5. 내 깃허브 사이트 들어가서 새로고침하면 푸시한 내용 뜨는 거 확인할 수 있음

 

 

 인텔리제이 터미널 명령어

 

▷ 깃 저장소 초기화

  • git init
    : 새로운 저장소 생성, 버전 관리 활성화
      ( 다음과 같은 에러가 뜰 경우 " fatal: not a git repository (or any of the parent directories): .git " )

 

 Git 변경사항 확인

  • git status
    : 변경 사항 있는지 확인
  • git status -s 또는 git status --short
    : 깃에서 변경된 내용을 간단하게 보여줌.
      'M'은 수정한 파일, 'A'는 새로 생성한 파일, '??'는 untracked, 'MM'은 staged이면서 unstaged를 의미함

 

▷ Pull

  • git pull origin master
    : 풀, 원격 브랜치 내용 가져오기
    (로컬 브랜치와 원격 브랜치 간의 히스토리가 다를 경우
    error: failed to push some refs to 'github.com:내 깃허브 주소' 에러가 뜸,
    origin은 리모트 저장소 이름이고 master는 브랜치 이름)

 

 Add(스테이징, 커밋을 하기 위해 스테이지에 올리기)

  • git add *
    • * : 현재 디렉토리의 모든 파일과 폴더(하위 디렉토리는 제외)를 스테이징
    • . : 현재 디렉토리와 그 하위 디렉토리의 모든 변경 사항을 스테이징(* 보다 포괄적이며 숨김 파일도 포함하므로 일반적으로는 이것을 사용하는 것이 더 안전함)
    • 파일경로 : 특정 파일만 추가할 경우 * 대신 추가할 파일의 경로를 입력하면 됨

 

▷스테이지 관련

  • git rm 파일경로 --cached
    : 스테이지에 올린 파일 삭제하기(로컬에 파일 그대로 남아 있음. git 관리에서 완전히 제거하고 싶을 때 사용)
  • git restore --staged 파일명
    : 스테이지 상태를 마지막 커밋 상태로 되돌리기(작업 디렉토리의 변경 사항은 그대로 유지. 최근 스테이지한 변경 사항을 취고 하고 싶을 때 사용)
  • git diff
    : 스테이지에 올라가지 않은 파일의 변경 부분을 확인할 수 있음
  • git diff --staged 또는 git difff --cashed
    : 스테이지에 올라간 파일의 변경 부분을 확인할 수 있음

 

 Commit

  • git commit -m "커밋 메시지"
    : 커밋
  • git commit --amend -m "수정할 새로운 커밋 메시지"
    : 가장 최근에 한 커밋 메시지 수정

 

 커밋 관련

  • git log, 커밋 정보 확인
    : git log -p

 

 Push

  • git push origin master
    : 푸시 (origin은 리모트명, 보통 기본 브랜치명은 master 또는 main)
      (git push 리모트명 브랜치명)

 

Push 관련, 리모트 저장소 없다고 뜨는 경우

  • 깃 설치, 깃허브 생성조차 안 했을 경우 [Git & GitHub_1-1] 게시글 참고
  • 이전에 깃을 등록한 이력이 있는 상태에서 새로운 프로젝트 작업 후 푸시 했는데 " error: failed to push some refs to 'origin' " 에러가 뜨는 경우는
    인텔리제이 상단 '깃' 메뉴에서 원격저장소 다시 등록하면 됨

 

원격저장소

  • git remote -v
    : 현재 설정된 원격 저장소의 이름과 URL을 보여줌
  • git remote show origin
    : 리모트 저장소 상세 정보 보여줌

 

 Branch 관련

  • 원격 브랜치 목록 확인
    (" fatal: couldn't find remote ref main " 에러는 main 브랜치가 존재하지 않아서 뜨는 거임, 보통 main 또는 master 브랜치 중 하나임)
    : git fetch origin
      git branch -r
  • git branch 브랜치명
    : 브랜치 생성
  • git checkout -b 브랜치명
    : 새로운 브랜치를 생성하고 바로 체크아웃(전환)하기
  • git checkout 브랜치명
    : 브랜치 전환
  • git branch
    : 현재 브랜치 확인

 

새 프로젝트 생성 후 새로운 브랜치 생성

※ 인텔리제이에서 새로운 프로젝트로 만들면 원격저장소를 재등록해야 함

  1. git init으로 깃 초기화
  2. 원격저장소 등록 (git remote add origin repository주소)
  3. git checkout -b 브랜치명으로 새로운 브랜치 생성 후 체크아웃
  4. git add *로 스테이징
  5. 커밋, 푸시

 

 

 .gitignore 파일

  • 빌드 시스템으로 인해 자동으로 생성되는 파일로 git 관리가 필요 없는(무시할) 파일 패턴을 작성해 둔 파일
  • *.a
    : 확장자가 '.a'인 파일은 모두 무시한다는 의미
  • !lib.a
    : 확장자가 '.a'인 파일은 모두 무시하도록 했지만 'lib.a'인 파일은 예외적으로 무시하지 않겠다는 의미
  • build/
    : build/ 디렉토리에 있는 파일은 모두 무시한다는 의미
  • doc/**/*.pdf
    : doc 디렉토리 아래있는 모든 '.pdf'은 모두 무시한다는 의미