Git/Github 기본 개념
해당 내용은 evan-moon님의 블로그 내용을 정리한 글입니다.
Git이 무엇이고 왜 필요할까?
`깃(Git)`은 분산형 버전 관리 시스템이다.
소스 코드 등의 변경사항, 즉 버전을 관리해주는 시스템인 것이다
Git은 다음과 같은 프로세스를 위한 개념
원격 저장소에 있는 파일을 내 컴퓨터(로컬 저장소)로 복붙 → 로컬 저장소에서 수정 → 원격 저장소로 업데이트
자신이 변경한 로컬의 소스를 원격(서버)의 소스에 업로드하는, 즉 서버로 밀어올리는 행위를 `Push`라고 부름
서버의 소스를 자신의 클라이언트로 가져오는 행위를 `Pull` 또는 `Fetch`라고 부름
원격 저장소는 구글 드라이브와 같은 클라우드 스토리지와 비슷하게 생각하면 된다
전 세계 어딘가에 있는 서버에 우리의 소스를 저장하는 것이다
이때 이 서버를 제공해주는 대표적인 업체가 `깃허브(Github)`인 것이고 이 외에도 GitLab, Bitbucket 등이 있다
Git: 리누스 토르발스가 개발한 분산형 버전 관리 시스템
Github: Git 저장소 호스팅을 지원하는 웹서비스
Git을 사용할 때는 내가 어떤 리모트 서버에 변경 사항을 업로드 할 것인지 정해야하는데
관례적으로 사용되는 이름이 바로 `origin`이다
보통은 한 개의 리모트 서버만 운용하는 경우가 많기 때문에 `remote`와 `origin`을 혼용해서 부르곤 한다
주요 명령어
간단하게만 훑어보고 사용법으로 넘어가자!
명령어 | 설명 |
git clone | Remote → Local / 원격 저장소를 복제해 새 디렉터리로 가져옴 / git clone <URL> |
git add | (선택하기) Local → Stage / 파일 내용을 인덱스에 추가 |
git commit | (포장하기) 바뀐 사항을 저장소에 기록 / `-m` 옵션을 통해 커밋 메시지 작성 (git commit -m "커밋 메시지") |
git push | (보내기) 원격 레퍼런스 및 그와 관련된 오브젝트를 업데이트 |
git pull | Remote → Local / 원격 저장소의 변경사항을 가져온 뒤, 로컬 브랜치에 자동으로 병합 |
git fetch | Remote → Local / 원격 저장소의 변경사항을 가져온 뒤, 로컬 브랜치에는 영향을 주지 않음 |
git status | Stage의 상태를 표시 |
git log | Commit 기록을 표시 / `--oneline` 옵션을 통해 한 줄로 표현 |
git restore | Stage에서 제거: git restore --staged <파일명> |
`git reset`의 경우 주의하여 사용
git reset HEAD <파일> # 특정 파일을 unstage (add 취소)
`push`한 `commit` 삭제 방법 (branch를 혼자 사용하는 경우에만 사용, 이 외의 경우 `revert` 사용)
- local repo의 commit 삭제
- 가장 최근 commit 삭제: git reset HEAD^
- 특정 commit 이후의 commit 삭제: git reset --hard [commit ID]
- remote repo의 commit 삭제 (밀어버리고 덮어쓰기 → `-f` 옵션)
- Github의 commit 삭제: git push -f [origin] [branch name]
사용법
Git 설치
Mac OS의 경우 Homebrew로 간단하게 설치할 수 있다
brew install git
원격 저장소(Remote Repository) 생성
Github → Repositories → `New`
Repository name 넣고 생성
로컬 저장소(Local Repository) 생성
로컬에서 프로젝트를 진행할 폴더를 생성
`터미널`에서 새로 만든 로컬 디렉토리(프로젝트 폴더)로 이동
cd /Users/syk/kairosial # 각자의 로컬 디렉토리 경로
Remote Repository를 생성하고 나왔던 화면인 아래의 화면을 참조해서
`터미널`에서 아래의 커맨드를 실행
echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin <Git URL> # 로컬 저장소와 원격 저장소를 연결 / 'origin'이 원격 저장소의 기본 이름으로 많이 사용됨
git push -u origin main # 변경사항을 원격 저장소 origin의 main에 업로드하고, 해당 브랜치를 추적하도록 설정
⚠️참고사항⚠️ `git push -u origin main` 실행 시 remote: Support for password authentication ~ 에러
Personal access tokens 설정 후
git push -u origin main 실행하고
Username에는 Github ID
Password에는 생성한 토큰
⚠️참고사항⚠️: `git branch -M main`은 왜 필요한걸까?
2020년 10월 1일을 기준으로 새롭게 생성되는 repository의 branch 기본값은 master가 아닌 main
그리하여
Git의 branch 기본값은 master
Github의 branch 기본값은 main
나의 경우 branch 기본값을 main으로 사용하기 위해 위에서 언급된
git branch -M main 코드 이용
기본적인 흐름
리모트 서버의 레파지토리에서 소스를 내 컴퓨터에 받아온 뒤 변경사항이 생기면, 그 변경사항을 리모트 서버에 다시 업데이트
`clone` → `파일 수정` → `add` → `commit` → `push`
add
리모트 서버로 보낼 변경사항을 `선택`하는 단계
선택된 변경 사항들은 `스테이지(stage)`라고 불리는 공간으로 이동됨
git add . # 현재 디렉토리의 모든 변경사항을 스테이지에 올린다
git add ./src/components # components 디렉토리의 모든 변경사항을 스테이지에 올린다
git add -p # 변경된 사항을 하나하나 살펴보면서 스테이지 올린다
스테이지에 담긴 변경사항들은 `git status` 명령어를 사용하여 확인 가능
git status # 스테이지의 변경사항 확인
git status -v # 어떤 파일의 어떤 부분이 변경되었는지도 확인
commit
스테이지에 있는 변경사항을 `포장`하는 단계
이때 포장하는 행위를 `commit`이라고 함. 하나의 커밋을 하나의 버전으로 정의하기 때문에 상당히 중요!
git commit -m 'first commit' # 'first commit'이라는 커밋 메세지로 커밋
프로젝트에서 발생한 모든 커밋 히스토리를 `git log` 명령어를 사용하여 조회 가능
git log # 커밋 히스토리 조회
git log --oneline # 각 커밋을 한 줄로 간결하게 표시
git log --graph # 브랜치 병합 및 분기 상태를 시각적 그래프로 표현
push
커밋을 통해 포장된 변경사항을 리모트 서버로 `보내는` 단계
커밋을 푸쉬할 때 Git에게 '어떤 리모트 서버의 어떤 브랜치로 푸쉬할 것인지'도 함께 알려주어야함
git push origin main # origin 리모트 서버의 main 브랜치로 푸쉬
브랜치 이름이 'main' 정도면 모르겠지만, 'SD-0000-request-api-refactoring'처럼 브랜치 이름을 매번 입력하는 것이 번거로울 수 있음
그래서 Git은 브랜치를 자동으로 추적할 수 있는 기능 또한 제공함
git push -u origin main
git push --set-upstream origin main
`-u` 또는 `--set-upstream` 옵션을 사용하면 처음 한번만 브랜치 이름을 입력하고 난 후에는 `git push` 명령어만 입력해도 자동으로 처음 입력했던 브랜치로 변경 사항을 푸쉬할 수 있음
Ref.
#깃허브 #Git 기초 #Git 기본 #Github 기초 #Github 기본
'Programming > Git, Github' 카테고리의 다른 글
[Git/Github] 다른 사람의 repo를 내 repo로 가져오기 (set-url) (0) | 2023.04.26 |
---|---|
[Git] git bash 에서 conda 명령어 사용 (0) | 2023.03.03 |