[Git]

jeyoon·2021년 4월 22일
0

Git

git은 버전 관리 시스템 중 가장 많이 쓰이고 강력한 도구이다.

버전 관리 시스템이란 뭐냐?

Version Control System

  • 버전관리 시스템(Version Control System - VCS)

    파일 변화를 시간에 따라 기록했다가 이후에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다. 동일한 정보에 대한 여러 버전을 관리하게 되며, 버전을 통해 시간적으로 변경 사항과 변경 사항을 작성한 작업자를 추적할 수 있다.

  • Why use version control?

    • Storing Versions (각각의 버전을 저장)
    • Restoring Previous Version (이전 버전 복원 가능)
    • Understanding What Happened (변경사항 파악 쉬움)
    • Collaboration
    • Backup
  • git은 가장 강력하고 대중적인 버전 관리 시스템
    (github는? git을 쓰는 사람들의 소셜 플랫폼, 즉 개발자들의 소셜 미디어)

파일은 크게 untracked와 tracked(unmodified, modified, staged) 영역을 거친다.

  • untracked : 파일을 생성한 후 한번도 add하지 않은 상태
  • tracked
    • unmodified : 현재 파일이 최신 커밋파일과 비교하여 바뀐게 없는 상태
    • modified : 현재 파일이 최신 커밋파일과 비교하여 바뀐게 있는 상태
    • staged : 파일 수정 후 git add한 상태 (staging area에 올라가 있는 상태)

fork, clone, push, pull

  • fork: github에 있는 repository를 나의 repository에 복사하는 것. 이를 이용해 비슷한 기능을 하지만 차별화된 다른 것들을 만들수도 있고, fork한 repository에서 기능추가를 마음껏 한 후에, 원래 저작자에게 이 기능을 반영해달라고 할 수도 있다.

  • clone: local repository, 즉 내 컴퓨터로 저장소 전체를 복사하는 작업.

  • push: remote repository로 변경사항을 보내줌. (remote repository에 있는 것을 직접적으로 수정할 일은 거의 없고, repository를 clone한 후 변경사항을 push해서 remote repository에 반영.)
    $ git push <url단축이름> <branch이름>
    ➡️ $ git push origin main

  • pull: push와 반대로 remote repository의 변경사항을 local repository로 받아오는 작업

$ git pull origin main
$ git pull upstream main

commit, staging area

  • commit (커밋; 변경사항)

    • (명사) 어떤 순간 작업 공간의 상태를 저장한 것. 작업공간 안에 있는 모든 파일과 파일의 데이터를 사진 찍듯이 복사해서 저장소에 보존한다. 즉 커밋은 작업공간의 어떤 시점의 스냅샷이라고 할 수 있다

    • (동사) '커밋한다'는 말은 커밋을 추가한다는 뜻이다. 즉 현재 작업공간의 상태를 커밋으로 만들어서 저장소에 저장한다는 의미이다.

    • 커밋할 때에는 협업을 위해 반드시 변경사항을 기록해줘야 한다.

    • 커밋 메시지 기록: git commit -m
      ex) $ git commit -m "Add headline to index page"

    • 코드를 커밋하려면 우선 코드를 staging area에 추가해야 한다.

  • staging area: 작업공간에서 변경이 발생한 파일을 다음 커밋에 포함되도록 예약하는 것을 stage라고 하고, 예약된 파일은 staging area에 들어가 있게 된다.

주요 명령어

  • git init : 로컬 저장소로 사용할 폴더를 생성하여 해당 폴더로 이동한다.

  • git status : 마지막 커밋 이후 작업공간에서 변경이 일어난 모든 파일들을 나열하는 명령어. 현재 추적되고 있는(tracked) 파일을 초록색으로 표시하고 그렇지 않은 파일은 빨간색으로 나타냄

  • git add <file> : 파일을 staging area에 추가해서 git의 관리 하에 둠. staging area에 있는 파일만 커밋할 수 있다. 주로 git add . 의 형태로 사용한다. git add .를 이용하면 모든 파일을 한번에 staging area에 추가할 수 있다.

  • git rm <file> : 해당 파일을 추적해제(unstage)시키는 명령어. git add 명령어의 반대이다.

  • git commit : 커밋을 추가해 변경사항을 저장한다. 커밋 명령어를 사용해서 커밋을 추가하는 것을 가리켜 '커밋한다'라고 부른다. 주로 git commit -m "(코멘트; 커밋에 덧붙일 말)" 형식으로 사용.

  • git log : commit history 확인

    • 터미널 창 종료: q키
  • git reset HEAD^: 가장 최신 commit 취소 + 스테이지 취소

    • 아직 remote repository에 업로드 되지 않고 local repository에만 commit 해놓은 기록이라면 reset 명령어를 통해서 commit을 취소할 수 있다.
    • git reset HEAD~1 또는 git reset HEAD^1 을 쓸 수도 있음
  • git checkout (깃 2.23.0 이전)

    • 브랜치 변경 및 생성
    • 복원
      • git checkout <file>: Modified 상태의 파일을 add하지 않고 다시 Unmodified 상태, 즉 원래대로 되돌려줌.
    • 깃 2.23.0 이후 checkout의 기능이 각각 switch와 restore로 분리
  • git switch : 브랜치 변경 / 브랜치 생성 및 변경

  • git restore <file> : Commit 혹은 staged 되지 않은 파일(작업 중인 파일)의 변경사항 취소. 처음 clone 받아왔던 상태로 되돌려줌

    • git add를 통해 staged된 파일을 다시 폐기할 때도 이용할 수 있다.
      ➡️ git restore --staged <file>
  • git diff : 수정된 파일에서 어떤 부분이 달라졌는지 확인할 때 사용

  • git remote -v: 현재 local repository와 연결되어 있는 모든 remote repository 확인

  • git remote add <단축이름> <url>

    • 원격 저장소 추가
    • 내 github에 추가하려면 github에 repository 하나 만든 후git remote add origin <repository 주소>
    • git remote add pair <url> 을 등록하면 url 대신 pair 라는 이름을 사용할 수 있다.
    • 지우고 싶으면 git remote remove pair

0개의 댓글