개념

명령을 치기 전에, 파일이 거치는 자리와 GitHub가 맡는 일을 나눕니다.

Git과 GitHub는 다른 것이다

Git은 내 폴더 안의 변경 이력입니다. 인터넷이 없어도 커밋할 수 있습니다. GitHub는 그 이력을 올려 두는 사이트이고, 이슈·검토·권한을 더합니다.

비슷한 사이트로 GitLab, Bitbucket이 있습니다. 원격에 올리고 받는 명령은 같고, 사이트 화면 이름만 다릅니다. 이 단원의 화면 설명은 GitHub 기준입니다.

세 칸

파일을 저장했다고 커밋이 되지는 않습니다. Git은 변경을 세 칸으로 나눕니다.

칸 의미 확인
작업 폴더 지금 디스크에 있는 파일. 편집기에서 저장한 직후. git status, git diff
스테이징 다음 커밋에 넣을 것만 골라 둔 목록. git add 후 git status
저장소 커밋으로 고정된 이력. 폴더 안 .git에 있습니다. git log

커밋은 “이 파일들을, 이 설명과 함께, 이 시점으로 남긴다”는 기록입니다. 파일 복사본을 메일로 보내는 것과 다릅니다. 이전 커밋과의 차이가 쌓입니다.

브랜치

브랜치는 커밋 하나를 가리키는 이름입니다. 새 GitHub 저장소의 기본 이름은 main입니다. 옛 자료의 master는 같은 역할의 예전 이름입니다.

기능을 만들 때는 main을 직접 고치지 않고 새 브랜치를 팝니다. 그 브랜치의 커밋은 main과 따로 있다가, 검토 뒤 합칩니다. 합치는 명령을 merge라고 합니다.

원격

내 컴퓨터의 저장소를 로컬, GitHub에 있는 저장소를 원격이라고 합니다. 원격의 기본 별명은 origin입니다.

  • git clone: 원격 저장소를 통째로 받아 로컬 폴더를 만듭니다.
  • git push: 로컬 커밋을 원격으로 올립니다.
  • git pull: 원격에만 있는 커밋을 받아 현재 브랜치에 합칩니다.
  • git fetch: 받기만 하고 내 파일에는 아직 합치지 않습니다. pull은 fetch 뒤에 merge를 합니다.

push는 커밋이 있을 때만 의미가 있습니다. 저장만 하고 push하면 GitHub의 파일은 그대로입니다.

Pull Request

Pull Request(PR)는 Git 명령이 아닙니다. GitHub에서 “이 브랜치를 저 브랜치에 넣어 달라”고 열고, 차이(diff)를 보고, 댓글을 달고, 머지하는 화면입니다.

혼자 하는 저장소에서도 PR을 쓰면, 무엇을 왜 바꿨는지 한곳에 남습니다. 여러 사람이 main에 바로 push하지 않게 하는 장치이기도 합니다.