git은 버전 관리 시스템 중 가장 많이 쓰이고 강력한 도구이다.
버전 관리 시스템이란 뭐냐?
버전관리 시스템(Version Control System - VCS)
파일 변화를 시간에 따라 기록했다가 이후에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다. 동일한 정보에 대한 여러 버전을 관리하게 되며, 버전을 통해 시간적으로 변경 사항과 변경 사항을 작성한 작업자를 추적할 수 있다.
Why use version control?
git은 가장 강력하고 대중적인 버전 관리 시스템
(github는? git을 쓰는 사람들의 소셜 플랫폼, 즉 개발자들의 소셜 미디어)
파일은 크게 untracked와 tracked(unmodified, modified, staged) 영역을 거친다.
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 (커밋; 변경사항)
(명사) 어떤 순간 작업 공간의 상태를 저장한 것. 작업공간 안에 있는 모든 파일과 파일의 데이터를 사진 찍듯이 복사해서 저장소에 보존한다. 즉 커밋은 작업공간의 어떤 시점의 스냅샷이라고 할 수 있다
(동사) '커밋한다'는 말은 커밋을 추가한다는 뜻이다. 즉 현재 작업공간의 상태를 커밋으로 만들어서 저장소에 저장한다는 의미이다.
커밋할 때에는 협업을 위해 반드시 변경사항을 기록해줘야 한다.
커밋 메시지 기록: 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 확인
git reset HEAD^
: 가장 최신 commit 취소 + 스테이지 취소
git reset HEAD~1
또는 git reset HEAD^1
을 쓸 수도 있음git checkout
(깃 2.23.0 이전)
git checkout <file>
: Modified 상태의 파일을 add하지 않고 다시 Unmodified 상태, 즉 원래대로 되돌려줌.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>
git remote add origin <repository 주소>
git remote add pair <url>
을 등록하면 url 대신 pair 라는 이름을 사용할 수 있다.git remote remove pair