git
은 버전 관리를 위한 소프트웨어 중 하나 입니다.
어떤 작업물의 최종본만 갖고 있는 것이 아니라 그 이전 각 수정본을 모두 보유함으로써, 필요할 때 이전 버전을 참고하거나 그 버전으로 되돌릴 수 있게 합니다.
깃을 사용하기 전에 사람들은 프로젝트를 진행할 때 '다른 이름으로 저장..'등 을 사용해서 매번 새 버전을 저장함으로 각 버전들을 유지하는 식으로 프로젝트를 해왔는데, 이제는 Git
과 같은 시스템에서 이런 버전을 저장소repoditory
라는 곳에 각 버전 사본을 유지하는 것입니다
☆☆☆☆☆
하지만 깃이 아직 익숙하지 않다면 백업은 필수입니다..!!
pull 받아오기 전에 백업하는 것을 습관화합시다!
(깃을 사용하기 전에 하던 원시적인 방법처럼 다른 이름으로 복사해서 저장해둡시다)
- 레포지터리
repository
: 깃에 생성하는 저장소의 단위입니다. 프로젝트의 단위라고 생각해도 좋습니다. 지금 이 깃허브 스터디에서 레포지터리 이름은 'Github-Study'입니다. - 커밋
commit
: 비디오 게임에서 진행 도중 특정 지점을 임시 저장하듯이 일시 정지할 수 있는 지점에 해당하는 버전을 저장소에 저장하는 것을 커밋이라고 합니다. 모든 커밋에는 작업자의 이름이 포함되므로, 특정 변경 작업과 관련해서 칭찬하거나 원망할 사람이 누군지 정확히 알아낼 수 있습니다. :)- 이 레포지터리의 커밋 로그 살펴보기 - 각 커밋에서 '< >' 버튼을 클릭하면 해당 버전의 소스들을 확인할 수 있습니다.
- 브랜치
branch
: 커밋들이 모여 구조화된 것이 브랜치입니다. 각 브랜치는 프로젝트 히스토리 안에서 하나의 진화하는 트랙에 해당합니다. 공식적인 주 버전에 해당하는 브런치는 보통 main 또는 master입니다.- Tip: 협업을 진행할 때, 메인 브런치에 바로 올리는 것보다, 본인 이름의 브랜치를 생성해서 그 브랜치에 작업 후, 메인 브랜치에 합치는 것이 더 충돌 관리가 쉬울 것입니다!
-
로컬 레포지터리
Local repository
: 개인 컴퓨터에 저장된 레포지터리입니다. 각 버전이 개인 컴퓨터 저장소에 저장되어 있어, 깃허브에 올리지 않으면 다른 사용자들이 확인할 수 없습니다. -
원격 레포지터리
Github repository
: Github에 저장된 레포지터리입니다. 다른 깃허브 사용자들이 확인할 수 있고, 이 레포지터리를 이용해 다른 개발자와 협업할 수 있습니다. -
푸시
push
: 로컬 레포지터리에서 생성한 커밋들을 깃허브 레포지터리에 올리는 작업입니다. -
풀
pull
: 깃허브 레포지터리에 있는 커밋들을 로컬 레포지터리로 가져오는 작업입니다. -
포크
fork
: 누군가의 레포지터리를 복사해 내 계정의 레포지터리로 가져오는 작업입니다. -
풀리퀘스트
pull request
: 브런치 두 개를 합치기를 요청하는 작업입니다.
git을 사용하기 이전에 git config
명령을 이용해, git에 사용자 정보를 저장해야 합니다.
cmd창을 켜고 다음과 같이 입력합니다. (name와 email은 github의 정보와 동일하게 작성합니다)
git config --global user.name "<github 이름>"
git config --global user.email "<github 이메일>"
프로젝트 폴더 우클릭하고 'Git Bash Here' 클릭해서 나오는 터미널 창에 입력합니다.
- 해당 폴더로 로컬 레포지터리 생성하기
git init
- 로컬 레포지터리를 깃허브 레포지터리에 올리기
- GitHub 사이트에서 레포지터리 새로 생성 (Initialize this repository with 옵션 사용하지 않음)
- 깃허브 레포지터리를 로컬 레포지터리에 연결하기
Ex.
git remote add origin '깃허브 레포지터리 주소'.git
git remote add origin https://github.com/HeoJiye/Git-Study.git
- 로컬 레포지터리에서
commit
한 내용들을push
Ex.git push origin 'branch 이름'
git push origin main
- 깃허브 레포지터리를 해당 폴더에 가져오기
git clone '깃허브 레포지터리 주소'.git .
- 위에 점(.)을 붙이지 않으면 해당 폴더 안에 새로운 폴더가 생기고 그 파일이 로컬 레포지터리가 됩니다.
- 커밋할 데이터 등록하기(스테이징)
git add <스테이징할 파일 경로>
- 폴더 경로를 입력하면 해당 폴더 안 모든 파일이 스테이징됨.
- 모든 데이터 스테이징하기
git add *
- 스테이징된 파일들 확인하기
git status
- Changes to be committed: 스테이징된 파일들
- Changes not staged for commit: 수정되었으나 스테이징된 파일들 (커밋 시 이 파일들은 무시됨)
- Untracked files: 한번에 커밋한 적 없는 파일들
- add 취소하기
git reset HEAD <취소할 파일 경로>
- 취소할 파일 경로없이
git reset HEAD
만 입력하면 스테이징된 모든 파일들을 취소함.
- 취소할 파일 경로없이
- 각 변경 사항들을 모두 터미널에서 직접 확인하면서 스테이징 여부를 체크
git add -p
-
커밋하기
- 커밋할 데이터 등록(스테이징) 이후
git commit -m <커밋 메세지 입력>
- 커밋 기록 확인하기
git log
q
를 입력해, 터미널로 돌아가기
- 커밋 취소하기
- github에 올린 커밋은 취소 불가
git reset HEAD^
- 최근 하나를 취소함.
- 커밋되었던 파일들은 모두 unstaged 상태로 돌아감.
- 로컬 레포지터리의 변경사항 업로드하기(push)
git push origin <브랜치 이름>
- 본인 레포지터리가 최신 버전이 아니면 실패, fetch을 먼저 시도
- 깃허브 레포지터리의 변경사항 가져오기(pull)
-
pull: 깃허브 레포지터리로부터 필요한 파일을 다운 + 자동 병합
git pull origin <브랜치 이름>
- (주의) 충돌이 일어날 수 있고, 의도치않게 파일이 날아갈 수 있습니다..!
-
fetch: 깃허브 레포지터리로부터 필요한 파일을 다운
git fetch origin <브랜치 이름>
- 받아온 깃허브 레포지터리의 파일들이 브런치를 새로 생성
- 브런치 확인
git branch -r
- 브런치 확인
- 현재 브런치와 생성된 브런치 비교하기 (충돌 확인)
ex.
git diff HEAD <생성된 브런치>
git diff HEAD origin/main
- 로컬의 변경사항 커밋 후, 브런치 합치기
ex.
git merge <생성된 브런치>
git merge origin/main
- 충돌 해결하기
- 해당 파일에서 두 변경 사항이 모두 적혀있음. 직접 충돌 사항 변경하기
- visual studio 등은 충돌 편집기를 지원함.
- 이후 commit 후, push
- 받아온 깃허브 레포지터리의 파일들이 브런치를 새로 생성
-
출처: 데이비드 디마리, 『인간다운 Git』, webactually(2020)과 지예의 경험