DevCamp | 깃허브 실시간 세션 정리

JOY·2024년 10월 3일

DevCamp

목록 보기
2/17
post-thumbnail

Git / Github

-Git은 소프트웨어 개발 과정에서 생기는 변경사항을 시간에 따라 기록, 이전 버전과 비교하며 수정사항을 관리하는 분산 버전 관리 시스템

-Github는 Git의 히스토리(기록)을 온라인에 저장해주는 웹호스팅 서비스 시스템(클라우드)

-Git은 기본적으로 로컬 저장소를 지원하고, 협업에 필요한 원격 저장소는 Github, Gitlab 같은 서비스를 이용, 로컬 저장소가 있어 속도가 빠르고 자신의 로컬에 부담 없이 코드를 기록할 수 있으며, 원격 저장소에 문제가 생기면 로컬 저장소를 통해 복구도 가능

-프로젝트의 버전을 브랜치로 구분하고 자유롭게 움직일 수 있음

⇒ 소스 코드 관리 도구 중 Git을 사용하는 이유는 로컬 저장소를 이용한 빠른 퍼포먼스와 브랜치를 통한 효율적인 협업임


  • Git의 3가지의 컴포넌트
    - Work-tree (Working Directory)
    **현재 작업중인 디렉토리, 수정가능한 모든 파일이 포함된 영역**
    
    - Index (Staging Area)
    
    work-tree에 있는 수정된 파일 중 **commit할 파일들을 임시로 저장하는 공간**
    
    - Repository (컨테이너)
    
    **모든 커밋의 history를 snapshot 형태로 저장하는 공간** 
    
      - Local Repository: 작업 중인 컴퓨터에 저장되는 **변경 내역 저장 공간**_Git이 설치된 컴퓨터 저장 공간
      - Remote Repository:  **변경 내역이** 외부 서버에 저장되는 중앙 저장소_ Githib이 이에 해당함

    ㄴ Git의 컴포넌트들과 컴포넌트간 이동하는 명령어

Basic Skills

Add

git add {file name}
  • "file name"의 파일을 추적 및 Staged로 전환하는 명령어
git add .
  • 작업 중인 모든 파일을 추가 및 Staged로 전환하는 명령어

Commit

git commit -m "Commit Message"

git commit

git commit을 CLI에 입력면, vi 편집기를 사용한 편집모드에 들어가게 된다.

Log

git log

과거 버전을 확인할 수 있다.

Branch

git branch

로컬에서 사용 중인 브랜치를 확인하는 명령어

git branch --remote

원격 레포지토리에서 사용 중인 브랜치를 확인하는 명령어

git branch {New Branch Name}

"New Branch Name"이라는 이름의 브랜치를 생성하는 명령어

Checkout

git checkout {Branch Name}
  • "Branch Name"의 브랜치로 이동하는 명령어
git checkout -b {New Branch Name}
  • 새로운 브랜치 "New Branch Name"으로 개설하면서 이동하는 명령어

Remote

git remote --v

.git 파일이 있는 디렉터리가 어떤 원격 레포지토리에 연결되어있는지 확인하는 명령어

Push

git push origin

origin 원격 레포지토리로 업로드

Pull

git pull

현재 작업 중인 브랜치에서 원격 브랜치의 버전이 더 높을 때, 변경사항을 원격에서 로컬로 가져오는 명령어

Merge

개발자가 "Branch A"에서 작업 중이고, "Branch B"의 변경사항을 병합한다고 가정

git merge {Branch B}

"Branch B"의 변경사항을 병합하는 명령어

merge 충돌 나면
충돌 부분 해결 후 수동으로 merge 커밋 만들어 푸시

git add .
git commit -m "resolve merge conflict"
git push origin {원격브랜치}

Pull Request

Pull Request는 git의 기능이 아니고, GitHub의 기능입니다.
내 브랜치에서 작업 마치고, 다른 브랜치에 merge하기 전 팀원에게 코드 리뷰 요청, 적절하면 병합

  1. 이슈에서 브랜치 따기
    • 깃허브의 이슈에서 Development ⚙️ → Create a branch (Branch name 수정)
git fetch origin
git checkout joy/#{주차}
  1. (브랜치 생성 후 작업 중에 원격에 다른 커밋이 생기면) 그 최신상태를 반영해야 한다.
    push 전에도 하면 충돌 미리 예방 가능
git pull origin joy/main //원격 joy/main에서 최신 상태를 가져와 로컬에 반영
git push origin joy/#{주차} //병합 후 작업 브랜치를 원격에 푸시
  1. 작업 후 add - commit - push
git add .
git commit -m "[week1/mission] TodoList (HTML, CSS, JS) 구현”
git push origin joy/#{주차}
  1. 깃허브에서 PR 날리기

  2. 코드리뷰 및 Approve

    PR의 Files changed 부분에서 코드와 함께 코멘트를 남길 수 있다.

  3. 자신의 main 브랜치에 merge

    모든 reviewer의 approve를 받고 main 브랜치에 각 주차의 브랜치를 병합. 이후 각 주차 브랜치는 삭제

Advanced Skills

Delete Push

git push -d {Remote Name} {Branch Name}

원격에 브랜치를 푸시가 되어있는 상황에서, 푸시를 제거하고 싶을 때 수행하는 명령어

Fetch

pullfetch의 가장 큰 차이점은 원격의 사항들을 가져와서 로컬에 자동으로 적용한다는 점
git fetch는 원격 저장소에서 변경 사항을 로컬로 가져오지만, work-tree에 반영하지는 않음
반면git pull은 원격 저장소에서 변경된 정보를 가져와 work-tree에 적용함

pullfetch + merge를 동시에 수행하는 것임


그렇다면 fetch를 왜 사용하는가?

원격에 있는 변경사항을 로컬 Git에 적용하기 전 확인 가능 -> merge 충돌에서 안전함

git fetch    
git diff ...{원격 브랜치}

Stash (임시저장)

: 현재 작업하던 브랜치에서 다른 브랜치로 전환하는데, 변경사항들을 임시저장하고 넘어가려고 할 때 사용

현재 적용된 commit이후로 변경된 모든 사항들이
stash 공간으로 이동된다.

git stash
git stash push -m "임시저장 타이틀"
git stash list

임시저장된 변경사항들의 리스트를 보여준다.

# stash@{항목번호} 안쓰면 마지막 저장 항목 처리
git stash apply stash@{항목번호} # 임시저장된 항목 중 하나를 선택하여 적용
git stash drop stash@{항목번호} # 선택 항목 삭제
git stash pop stash@{항목번호} # 선택 항목 적용, 삭제

치워둔 항목 처리

git stash branch {브랜치명}

새 브랜치를 생성해 pop - 충돌 예방

git stash clear 

치워둔 모든 항목들 비우기

Amend

: 가장 최근의 커밋 메시지를 수정

git commit --amend

가장 최근 커밋 메시지를 수정하는 vi 모드로 진입한다.

git commit --amend --no-edit

커밋 메시지 수정 없이, 현재 stage한 항목을 이전 커밋에 넣는다.

  • HEAD는 일종의 포인터
  • 터미널에서 현재 상태로 보여지는 값을 HEAD라고 한다.

Checkout into Hash

git commit checkout {commit hash}

특정 커밋 버전으로 돌아간다.

Merge Conflict Resolve Editor & GUI Tools

profile
모든 일에 진심을 담아서

0개의 댓글