명령을 치기 전에, 파일이 거치는 자리와 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(PR)는 Git 명령이 아닙니다. GitHub에서 “이 브랜치를 저 브랜치에 넣어 달라”고 열고, 차이(diff)를 보고, 댓글을 달고, 머지하는 화면입니다.
혼자 하는 저장소에서도 PR을 쓰면, 무엇을 왜 바꿨는지 한곳에 남습니다. 여러 사람이 main에 바로 push하지 않게 하는 장치이기도 합니다.