Code States/TIL

[0320] Git과 버전 관리 시스템 - Git

ki1111m2 2023. 3. 20. 13:47

Achievement Goals

  • 상황에 따라 Github의 기능과 Git 명령어를 사용할 수 있다.
    • Fork
    • clone
    • status
    • restore
    • add
    • commit
    • reset
    • log
    • pull
    • push
    • init
    • remote add
    • remote -v
  • Git의 세 가지 영역 및 상태를 이해할 수 있다. (Committed, modified, staged)
  • Remote Repository를 페어와 공유하며 협업을 할 수 있다.
  • 충돌이 발생했을 경우 해결할 수 있다.

Advanced Challenge (optional)

  • Git Repository의 commit되지 않은 변경 사항을 취소할 수 있다.
    • reset HEAD <file>
    • checkout -- <file>
  • 협업을 위한 git 개념을 이해할 수 있다.
    • branch, merge의 개념
    • remote repository에서 origin과 upstream의 차이점

  • Git repository
    • Git으로 관리되는 폴더
    • 작업할 때는 Local Repository에서 할 수 있고 내가 작업한 코드를 공유하려면 Remote Repository에 업로드해 여러 사람과 공유할 수 있음
    • 다른 사람이 Remote Repository에 올려놓은 코드를 내 Local Repository에 가져올 수도 있음
  • Fork
    • 공유 리모트 레파지토리를 내 리모트 레파지토리로 가지고 오는 작업
  • Clone
    • 내 리모트 레파지토리에서 내 컴퓨터로 가지고 오는 작업
  • Push
    • 로컬 레파지토리에서 기록해 놓은 커밋을 리모트 레파지토리에 업로드하는 작업
  • Pull
    • 리모트 레파지토리에서 변경 사항이 있을 때 로컬 레파지토리로 가지고 오는 작업

혼자 작업 workflow


  • Git의 영역 및 상태
    • Untracked area: Git이 관리하고 있지 않은 영역
    • Tracked area: Git의 관리를 받는 영역
      • Unmodified: 기존에 커밋했던 파일을 수정하지 않은 상태
      • Modified: 기존에 커밋했던 파일을 수정한 상태
      • Staged: 커밋이 가능한 상태
  • git init
    • 작업 중인 폴더를 로컬 레파지토리로 설정
     

  • git status
    • 로컬의 staging area, untracked files을 확인할 수 있음
    • 어떤 파일이 어떤 상태에 있는지, 해당 파일에 대해 어떤 행동을 할 수 있는지 알 수 있음
     

  • git restore <파일명>
    • commit되지 않은 로컬 레파지토리의 변경사항을 취소 및 폐기
  • git add <파일명 or .>
    • commit을 하기 위해 로컬의 파일들을 staging area로 옮기는 작업
    • . 을 사용하여 모든 파일을 한 번에 추가할 수 있음
  • git commit -m ‘커밋 메시지’
    • 커밋 기록에는 날짜, 커밋한 사람, 커밋 메시지가 모두 출력됨
  • git reset HEAD^
    • 리모트 레파지토리에 업로드 되지 않고 로컬 레파지토리에만 커밋한 상태에서, 커밋한 내용을 취소
    • ^은 1을 의미 즉, HEAD~1도 가능, HEAD3은 HEAD^^^을 의미
  • git push <origin> <branch>

  • 아래의 명령어 3줄을 터미널에 따라 입력하면 푸시할 수 있음
    • git remote add origin http://~
      • 로컬 레파지토리에 링크의 origin 원격 레파지토리를 추가한다
    • git branch -M main
      • branch 이름을 main으로 변경
    • git push -u origin main
      • origin 원격 레파지토리의 main branch로 현재 로컬 레파지토리를 푸시
  • 리모트에 있는 origin의 master 브랜치에 로컬 레파지토리의 변경사항을 업로드하기 위해서는 <branch> 자리에 master 입력
  • git log
    • 현재까지 커밋된 내여들을 터미널 창에서 확인할 수 있음
  • Fork
    • 다른 계정의 리모트 레파지토리를 내 계정으로 가지고 올 때 사용
  • git clone <레파지토리 주소>
    • 리모트 레파지토리를 내 로컬에서 이용할 수 있도록 복사
  • git remote -v
    • 연결된 레파지토리들 확인 가능
  • Pull Request
    • 내가 Push한 변경 사항에 대해서 다른 사람들에게 알리는 것

함께 작업 workflow


  • git remote add origin <리모트 레파지토리 주소>
    • 로컬 레파지토리에 리모트 레파지토리 연결
  • git remote add <상대 이름> <리모트 레파지토리 주소>
    • 로컬 레파지토리에 상대의 리모트 레파지토리 연결
  • git pull <상대 이름> <branch>
    • 리모트 레파지토리의 해당 브랜치 내용을 로컬 레파지토리로 가져옴
    • 받아오는 내용은 자동으로 병합됨
  • 같은 부분을 변경한 내용이 존재해 자동으로 병합할 수 없는 경우
    • git status 명령어를 통해 어떤 파일이 충돌하고 있는지 확인할 수 있음
    • 저장 옵션을 선택해서 파일 수정 반영
    • 수정을 마치면 병합 커밋을 생성해주기 위해서 파일을 staging area로 추가해야함

깃허브와 깃을 들어만 보고 사용해보진 않았다

가끔 소스 코드 검색을 할 때 깃허브에 올라와있으면 어떻게 쓰는지 몰라 버벅거리며 포기했는데 이제는 사용할 수 있을 것 같다

처음 해보는 것이라 제대로 되고 있는진 잘 모르겠지만..

내일 실습을 통해 깃의 작동 원리를 제대로 이해해야겠다

실습 전에 미리 실습 내용을 한번 확인해보고 정리해보아야 할 듯