Git & GitHub로 버전관리
🔍

Git & GitHub로 버전관리

Description
Git과 GitHub로 버전관리하는 방법
Published
2023-06-05

Git으로 버전관리

  1. 원하는 폴더에서 Git 초기화
  1. Git 초기화를 하면 .git이라는 숨겨진 폴더가 생성됨
  1. 로컬 저장소에 내가 만든 버전 정보, 원격 저장소 주소 등이 저장됨
  1. 원 격 저장소에서 내 컴퓨터로 코드를 받아오면 로컬 저장소가 자동으로 생성됨
  1. 한 폴더에 하나의 로컬 저장소만 유지해야함
 

Git 사용자 정보 등록

git 전역 사용자 설정 (GitHub의 닉네임과 이메일을 입력)
 

커밋 생성

  • 원하는 파일만 선택하기
  • 메세지를 달아 커밋으로 만들기
  • 생성한 커밋 보기
 

원격 저장소 GitHub에서 만들고 커밋 푸시하기

  1. GitHub에 로그인해서 저장소 생성
  1. 내 컴퓨터 폴더에 GitHub 저장소 주소 알려주기(원격 주소 이름: origin)
  1. 만든 커밋 푸시하기
  1. GitHub 사이트에서 올라간 커밋 확인
 

GitHub 저장소 내 컴퓨터에 받아오기: 클론(Clone)

  1. 내 컴퓨터에 폴더를 만들고 GitHub의 저장소 받아오기
  1. 새 파일을 생성 후 add → commit → push
  1. GitHub에서 새 커밋 확인하기
 

원격 저장소의 변경사항 내 컴퓨터에 받아오기: 풀(Pull)

  1. 내 컴퓨터 폴더에 파일 없는거 확인
  1. 풀 명령어로 새로 올라온 커밋을 받기
  1. 새로 생긴 파일 확인
사용 중인 브랜치의 이름을 모르면 HEAD(지금 작업하는 로컬 브랜치를 가리킴)로 작성하면 된다.
 

Git의 4가지 파일 상태

  • untracked - 추적 안됨
  • tracked - 수정 없음, 수정함, 스테이지됨
 

브랜치 만들기

 

만든 브랜치로 이동하기

기존에는 checkout을 사용했었다. checkout할 때는 워킹 디랙토리를 비우고 해야한다. (컨플릭트 방지)
 

base 브랜치와 compare 브랜치를 합치기

base 브랜치로 이동해서 명령
 

컨플릭트 해결하기

  1. 컨플릭트가 발생하면 4가지 중 하나 선택
      • Accept Current Change
      • Accept Incoming Change
      • Accept Both Change
      • Compare Chage
  1. 해결된 컨플릭트 파일은 add하고 커밋
 

브랜치 vs 포크

의의
편리한 점
불편한 점
브랜치
하나의 원본저장소에서 분기를 나눈다.
하나의 원본저장소에서 코드 커밋 이력을 편하게 볼 수 있다.
다수의 사용자가 다수의 브랜치를 만들면 관리하기 힘들다.
포크
여러 원격저장소를 만들어 분기를 나눈다.
원본저장소에 영향을 미치지 않으므로 마음껏 코드를 수정할 수 있다.
원본저장소의 이력을 보려면 따로 주소를 추가해줘야 한다.
 

포크한 후 풀 리퀘스트로 머지 요청 보내기

  1. 포크를 하고 내용을 add하고 커밋
  1. GitHub에서 Contribute 클릭 후 Open pull request 버튼 클릭
  1. pull request 작성
  1. Merge pull request 버튼 클릭
 

풀 리퀘스트로 머지 요청 보내기

  1. 코드를 함께 작성하는 팀원이 있다면, 최대한 직접 머지하는 건 피하고 모든 머지를 풀 리퀘스트를 통해서 하기
  1. 동료가 내 풀 리퀘스트(PR)을 보고 코드를 리뷰할 수 있다.
  1. 동료의 PR에 수정이 필요하면 댓글을 달아 change request를 보낼 수 있다.
  1. 오픈소스에 PR을 보낼때는 기여 안내문서(contribution guideline)을 반드시 참고
 

브랜치 관리하기

  1. 보통 feat/기능이름 으로 한 사람이 개발하는 기능 브랜치를 만든다. (혹은 fix/버그이름, hotfix/급한버그)
  1. 작업이 끝나면 dev(혹은 main) 브랜치로 PR을 보낸다.
  1. dev 브랜치에서 큼지막한 작업이 모두 머지되면 release(혹은 latest) 브랜치로 머지시키고 이를 실서버에 배포한다.
  1. 직접 커밋은 feat(혹은 fix, hotfix)브랜치에만 한다.
  1. devmain, release 브랜치에는 직접 커밋하지 말고 머지만 한다.
 

amend: 깜빡하고 수정 못한 파일을 방금 만든 커밋에 추가하고 싶을 때 쓰는 명령

  1. 커밋 생성
  1. 코드 업데이트
  1. 기존 커밋에 amend해서 커밋 수정 & push
  1. 커밋 메세지만 수정
  1. force push(히스토리도 변경)
 
  • vscode
      1. “…” 버튼을 클릭
      1. Commit > Commit Staged (Amend) 혹은 Commit All (Amend)
 

stash: 변경사항을 잠시 킵하기

  • vscode
      1. “…” 버튼을 클릭
      1. Stash > Stash
      1. 다시 불러오고 싶다면 Stash > Pop Stash
 

reset: 옛날 커밋으로 브랜치를 되돌리기

  • reset의 3가지 옵션
    • -soft : add한 상태, staged 상태, 파일 보존
    • -mixed : add하기 전 상태, unstaged 상태, 파일 보존
    • -hard : add하기 전 상태, unstaged 상태, 파일 삭제
    •  
  • vscode
      1. “…” 버튼을 클릭
      1. Commit > Undo Last Commit ← soft
      1. Staged Changes에서 취소하고 싶은 파일에서 “-”(Unstage Changes) 클릭하여 스테이징을 해제
      1. Changes에서 “↺”(Discard Changes) 클릭
      1. 터미널에서 git push -f origin main
 

revert: 커밋의 변경사항을 되돌리기

히스토리를 변경하지 않고 새로운 커밋을 만들어서 되돌아간다.
 
  • sourcetree
      1. 히스토리에서 원하는 커밋 마우스 오른쪽 클릭
      1. Reverse commit 클릭
 

cherry-pick: 커밋 하나만 떼서 지금 브랜치에 붙이기

  • sourcetree
      1. 다른 브랜치의 원하는 커밋 마우스 오른쪽 클릭
      1. Cherry Pick 클릭
 

유용한 PR 양식

주요 변경사항
  • 이 PR이 해결하는 문제
링크
  • 디자인 시안 링크 / 슬랙 관련 대화 링크
시급한 정도
  • 보통 / 긴급 / 천천히
중심적으로 봐주었으면 하는 부분
  • 변경사항이 큰 경우 집중해야 할 부분, 또는 불안해서 봐주었으면 하는 부분 등