Git & GitHub로 버전 관리

Git과 GitHub로 버전 관리 대략적인 과정

  1. Git 초기화
    • git init 명령어로 폴더를 Git 저장소로 초기화하면 .git 폴더가 생성된다.
  2. 로컬 저장소 관리
    • .git 폴더에는 버전 정보와 설정이 저장된다. 한 폴더에는 하나의 로컬 저장소만 있어야 한다.
  3. 원격 저장소 연결 및 클론
    • 기존 로컬 저장소에 원격 저장소를 연결하려면 git remote add <name> <url>을 사용한다.
    • git clone 명령어로 원격 저장소를 복사하면 로컬 저장소가 생성되고 .git 폴더와 원격 저장소 정보가 포함된다.
  4. 변경 사항 관리
    • 파일을 추가(git add), 커밋(git commit), 푸시(git push)하여 로컬과 원격 저장소를 동기화한다.

Git 초기화

git init

Git 사용자 정보 등록

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

git config --global user.name "username"
git config --global user.email username@example.com

커밋 생성

  • 원하는 파일만 선택하기
git add [파일]
  • 메세지를 달아 커밋으로 만들기
git commit -m "메세지"
  • 생성한 커밋 보기
git log

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

  1. GitHub에 로그인해서 저장소를 생성한다.
  2. 내 컴퓨터 폴더에 GitHub 저장소 주소를 알려준다. (원격 주소 이름: origin)
  3. 만든 커밋을 푸시한다.
  4. GitHub 사이트에서 올라간 커밋을 확인한다.
git remote add origin [저장소_주소]

git push origin main

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

  1. 내 컴퓨터에 폴더를 만들고 GitHub의 저장소를 받아온다.
  2. 새 파일을 생성 후 add → commit → push
  3. GitHub에서 새 커밋을 확인한다.
git clone [저장소_주소] . <- 점을 찍어줘야 현재 폴더에 내려받는다. 안 찍으면 새 폴더 생성된다.

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

  1. 내 컴퓨터 폴더에 파일 없는지 확인한다.
  2. 풀 명령어로 새로 올라온 커밋을 받는다.
  3. 새로 생긴 파일을 확인한다.
git pull origin main

사용 중인 브랜치의 이름을 모르면 HEAD(지금 작업하는 로컬 브랜치를 가리킴)로 작성하면 된다.

브랜치

브랜치 만들기

git branch [브랜치명]

만든 브랜치로 이동하기

git switch [브랜치명]

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

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

git merge [compare_브랜치명]

base 브랜치로 이동해서 명령해야 한다.

브랜치 vs 포크

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

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

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

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

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

브랜치 관리하기

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

이외 여러 명령어들

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

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

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

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

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

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

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

히스토리를 변경하지 않고 새로운 커밋을 만들어서 되돌아간다.

  • sourcetree
    1. 히스토리에서 원하는 커밋 마우스 오른쪽 클릭
    2. Reverse commit 클릭

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

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